要实现无刷新更新数据控件需要分三步走:
  1. 客户端脚本触发回调方法
  2. 服务器端代码响应回调,并更新数据控件,将更新后的数据控件内容(html编码)发回客户端
  3. 客户端代码根据发回的内容重绘该数据控件

示例代码中,空白的页面上有三个DropDownListBox控件DropDownListBox_ADropDownListBox_BDropDownListBox_C,最终的目的是实现在页面不刷新的情况下当DropDownListBox_A的选择更改时动态的更新DropDownListBox_B和DropDownListBox_C的内容,实现联动。

在服务器端,首先要让自己的页面实现ICallbackEventHandler接口,如:
ASP.NET2.0 中回调的实现及常见问题的解决public partial class _Default : System.Web.UI.Page, ICallbackEventHandler

然后在页面上添加如下三个方法及一个公共string,固定套路:

#endregion

然后声明一个更新数据控件的方法,比如示例中的        

 1ASP.NET2.0 中回调的实现及常见问题的解决public string BindDropDownList_B(string str_index)
 2}

在客户端,你需要将两个数据控件的Html编码用<span></span>包起来,id分别为span_bspan_c,并在header中声明如下脚本:

 1ASP.NET2.0 中回调的实现及常见问题的解决<script language="javascript" type="text/javascript">
 2ASP.NET2.0 中回调的实现及常见问题的解决//  DropDownList_A的change
 3ASP.NET2.0 中回调的实现及常见问题的解决function OnChanged()
 4>

最后在Page_Load中为DropDownList_A添加onchange属性

ASP.NET2.0 中回调的实现及常见问题的解决DropDownList_A.Attributes.Add("onchange""OnChanged()");

直接点运行吧,注意看IE的进度条。是不是无刷新实现了下拉列表的联动:)

    需要说明的是,如果在Javascript脚本的OnChanged中接连两次回调服务器方法的话只有最后一次奏效,并且会有JavaScript报错,原因是微软的客户端回调实现代码中有一个缺陷:无论客户端回调了多少次,只要有一次回调完成,则视所有回调均完成,不是线程安全的!所以上述代码中使用了setTimeout做了中转,具体原因详见http://developers.de/files/279/download.aspx.
    
    以上代码虽很好的完成了无刷新前提下的数据控件更新,但仍有一个问题至今没有解决,就是虽然控件的数据重新更新了,但是状态却还是最后一次PostBack时的状态(本例中为初始状态),如果你去取某个下拉框的值,仍就是初始值,不知道哪位朋友有这方面的解决办法,万分感谢!

相关文章:

  • 2021-11-18
  • 2022-12-23
  • 2022-12-23
  • 2021-08-18
  • 2021-12-25
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-20
  • 2022-02-21
  • 2022-02-03
  • 2021-08-17
  • 2021-11-02
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案