zoukankan      html  css  js  c++  java
  • 关于客户端改变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的开发来说,均可以先变值再更新到

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

  • 相关阅读:
    The .NET weak event pattern in C#
    Setting an Event to Null
    Android: INSTALL_FAILED_UPDATE_INCOMPATIBLE错误解决措施
    快速打开 Mac OS X 隐藏的用户资源库文件夹
    Complete uninstall on Mac, HELP!
    为什么MacBook装Windows这么火?
    mac 刻录ISO系统盘
    MySQL子查询慢现象的解决
    程序人生的四个象限和两条主线
    Xamarin.Android,Xamarin.iOS, Linking
  • 原文地址:https://www.cnblogs.com/BeanHsiang/p/459495.html
Copyright © 2011-2022 走看看