ASP.NET中用XMLHTTP实现DropDownList无刷新联动

来源:互联网 发布:金蝶软件客户端打不开 编辑:程序博客网 时间:2024/05/29 08:31

      这几天在做项目的时候想实现二级联动,但是用DropDownList控件的AutoPostBack属性的话,需要刷新页面,用户体验不好,所以尝试着用XMLHTTP实现无刷新二级联动。也参考了下网上的做法。

      设计思路:当页面首次加载的时候将一级类别绑定到一级类别dlstFirstClass控件上,二级类别dlstSecondClass控件暂不绑定,当用户选择了一级类别是调用js代码将用户选择的一级大类的ID值传过去,将该ID值以POST方法发送给服务器,服务器根据ID值得到对应的二级大类表,用XML方式回发给客户,客户端调用js代码将该XML写到dlstSecondClass控件上,后台通过dlstFirstClass.SelectedValue获取一级大类值,对于二级大类用Request.Form[""]方式获取值。

      接下来,我们开始具体实现。

1、数据库设计

  

 

2、二级联动页面

 

该页面上只有两个DropDownList控件,用来实现二级联动,js部分主要是实现二级类别表的请求和对回发数据的处理功能。

 

3、二级联动页面的后台代码。这里只要在Page_Load中将一级类别绑定到dlstFirstClass控件上即可。

 

4、处理二级联动前台页面请求的页面,RequestData.aspx。该页面上什么也不用写,只要在RequestData.aspx.cs的Page_Load事件中写上处理请求及回发即可。代码如下。

 

5、获取二级大类的值。

string secondClassName = this.Request.Form["dlstSecondClass"].ToString();

 

     也有网上说在dlstSecondClass控件后面放一个隐藏的textBox控件,当dlstSecondClass的值发生变化时用js将变化后的值赋给文本框的Text,后台用获取文本框的Text的值的方法来获取dlstSecondClass的值,但是我觉得这种办法不好。太麻烦。

 

到此,DropDownList无刷新联动已经实现。如果出现如下错误:

System.ArgumentException: 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

网上说在Web.config中加入如下语句即可:

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/>

但是我试了没用的,我的做法是在<%@ Page />中加入 EnableEventValidation="false"即可解决。