日期:2014-05-19  浏览次数:20411 次

客户端用JS改变了ListBox的Item后,提交回服务器端后C#读不到
页面上一个按钮,客户端的OnClick事件如下:
                this.Button1.Attributes.Add( "onclick ",   string.Format( "AddOption( '{0} ', '{1} ', '{2} ');document.getElementById( '{3} ').value= 'abc ';return   false; ",   this.lbtResult.ClientID,   "test ",   "test ",this.TextBox1.ClientID));

其作用是在一个ListBox(到客户端后为Select)加一个Item(客户端为Option),并同时改变一个文本框的值。

点击“提交”按钮后,文本框的值可以读出来,但ListBox中通过JS新添加的Option读不到。

这个问题我看到有些朋友也遇到过,但不知道有高手解决了的没有,请赐教!

------解决方案--------------------
好像是取不到,看到过有通过xml进行描述的,然后通过隐藏域Post回去
------解决方案--------------------
你post回去之前,TextBox之类的控件状态保存在Stateview里面的,其他就保存不了了,所以会取不到值的
------解决方案--------------------
2005里面的隐藏域控件还是不错的,在js里面可以进行操作(Label不可见的情况下,js是无法操作的)
------解决方案--------------------
列表控件(包括DowndownList等等)确定SelectedItem的逻辑是根据提交的value值查找在viewState中每一个item的value,来设置选中项。如果找不到,就没有项目选中。你没有改变viewState吧?即使不麻烦,viewState也不允许单独在客户端改变。

所以你应该改弦易辙,顺着控件的处理机制协调地设计流程。