情况如下:
点击一个<input type="button">按钮,调用下面的javascript函数,
function removeallsysright()
{
    var count=Form1.ListBox_NotAllowedSysRight.options.length;
var count2=Form1.ListBox_AllowedSysRight.options.length;

for(var i=count;i<count+count2;i++)
{
    var ary1,ary2;
    ary1=new String(Form1.ListBox_AllowedSysRight.options[i-count].text);
    ary2=new String(Form1.ListBox_AllowedSysRight.options[i-count].value);
    Form1.ListBox_NotAllowedSysRight.options.add(new Option(ary1,ary2));

}
var j=0;
while(j++<count2)
Form1.ListBox_AllowedSysRight.remove(0);
}
其作用是把ListBox_AllowedSysRight的内容都移动到LIstBox_NotAllowedSysRight里,但点击确定提交时,两个ListBox仍然是原来的数据。ListBox的autopostback为false(由于应用的要求这一项不能改为true),有关绑定ListBox的代码是在(!PostBack)里的。不知到是为什么,望高手解答。
注:之前是在后台写的代码实现把ListBox_AllowedSysRight的内容都移动到LIstBox_NotAllowedSysRight里,没有出错。

解决方案 »

  1.   

    你需要理解,在服务器端,asp:ListBox的Items一般是那些在你aspx文件里声明的或存储在ViewState的,你在客户端做的改动,需要通过类似<input type=hidden ..>这样的控件把你的改动传回到服务器端,然后用编码修改或装入ListBox的Items集合
      

  2.   

    http://singlepine.cnblogs.com/articles/255353.html
      

  3.   

    回复人: saucer(思归) ( ) 信誉:410 
    你需要理解,在服务器端,asp:ListBox的Items一般是那些在你aspx文件里声明的或存储在ViewState的,你在客户端做的改动,需要通过类似<input type=hidden ..>这样的控件把你的改动传回到服务器端,然后用编码修改或装入ListBox的Items集合.谢谢,但是客户端javascript对textbox所做的修改确是能够在服务端获取的(但如果textbox的enable为false也不行),listbox和textbox有什么区别呢?只能通过隐藏控件来传值而没有其它简单一点的方法吗?
      

  4.   

    但是客户端javascript对textbox所做的修改确是能够在服务端获取的(但如果textbox的enable为false也不行),listbox和textbox有什么区别呢
    ——————————————————————————————————————————
    都是处理post上来的值。textbox处理post上去的值就放入text属性。而listbox处理post上去的值用来查找value并指定selectedIndex。list不对客户端随便修改的内容进行处理,实际上根本不接收。
      

  5.   

    只能通过隐藏控件来传值而没有其它简单一点的方法吗?
    ——————————————————————————————————————————
    麻烦出在你的思路——选择问题。你的<input type="button">应该改为服务器控件,并在服务器端动态改变ListBox。