关于客户端改变ListBox的一个小问题

    DotNet开发中,ListBox是个再熟不过的控件了,不过实际操作中却有一个场景,需要细细研究一下它

的特性.

    在Ajax大行其道的今天,如果仅仅想借助客户端脚本(主要是javascript)改变ListBox的Item,然后再

提交到服务端处理,居然带出了一些小问题.因为服务端是通过页面viewstate里的值来跟踪包括ListBox

这类服务器控件的值的变化的,如果在客户端使得ListBox的内容改变了,而viewstate域里的值没有变化

的话,到了服务端仍然不能通过ListBox.SelectValue取得改变的值的.可是viewstate是加密后的字符串,

我们无法通过代码来更改它的.

    参考了一些实例后,发现有两种途径能满足上述的需求.

    一. 通过Form[ListBox]方式来访问,假设ListBox的ID命名为lb1,那么作为表单元素的访问方法,用

Request.Form[lb1]就能直接获取在客户端改变后,并选择中的ListBox中的值.但遗憾的是只能取到

ListBox中item的Value,而没办法得到item的Text的值.

    二. 先斩后奏永远是王道.可以在客户端再动态添加一个<input type="hiden" runat="server">这

样的隐藏域,将客户端改变后的ListBox所有的Item以键值对的形式放在这个隐藏域里面,提交到服务端的

时候,把这个键值对取出来,将ListBox先clear所有的item,然后再按键值对重新添加ListBox的数据,这样

也就是保证了客户端和服务端的同步.也不存在方法一中取不到Item的text的值的问题了.因为是先有值,

再赋给ListBox的,这样操作虽然麻烦一些,但要灵活得多,对于喜欢JS的开发来说,均可以先变值再更新到

服务端的,建议能尝试用这样的方法.

posted on 2006-07-25 17:54  Bean.Hsiang  阅读(694)  评论(0编辑  收藏  举报