联动下拉菜单是我们平时做web开发时经常会遇到的一种情况。有多种实现的方式。比如数据一次加载在客户端联动或者回调填充。前段时间要给部门内部做个简单的培训用到相关的javascript和控件开发的时候,就那这个当作demo来做了。控件大概有4个部分组成,
1:控件的cs代码(AutoFillDDL.cs),2:客户端回应服务器段返回的数据,构建Option的js(AutoFill.js),3.服务器段写获取数据的方法的接口(IXBCallbackHandler)4。发送xmlHTTP请求的类的js(NetLoad.js)
AutoFillDDL.cs
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Web.UI.WebControls;
5
using System.Web.UI;
6
using System.ComponentModel;
7
using Beyondbit.Soft3.WebControl.Designer;
8
9
[assembly: WebResource("Beyondbit.Soft3.WebControl.Js.AutoFill.js", "application/x-javascript")]
10
[assembly: WebResource("Beyondbit.Soft3.WebControl.Js.NetLoad.js", "application/x-javascript")]
11
namespace Beyondbit.Soft3.WebControl
12
}
2
3
4
5
6
7
8
9
10
11
12
AutoFill.js
1
//构造函数,用于声明该类
2
;
2
IXBCallbackHandler.cs
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Web.UI.WebControls;
5
6
namespace Beyondbit.Soft3.WebControl
7
}
2
3
4
5
6
7
NetLoad.js
1
}
本来回调使用的是微软本身的ICallBack但是在实现多级关联的时候,即回调中又触发另外一次回调的时候js报错了,大概看了一下,应该是用了全局变量,在第二次回调的时候变量的值又被改变了。循环因子大于索引了。。 代码大部份已经给了详细的注释。。
汗,忘了讲怎么调用了,
编译成dll之后,在工具栏拖到页面上即可使用多级联动就拖多个,对应不同的父子关系
可以在使用的页面或者继承该控件的子控件中实现IXBCallbackHandler接口,
parent就是触发联动的下拉菜单的选中项的,callItemID就是联动控件的ClientID,在多级联动中可以根据这个判断这个值来判断是哪个回调,然后相应的返回各自的对应数据
取数据的方法是自己定义的返回一个ListItem的数组即可,因为没有放演示的空间 。。唉