一个下拉联动控件的实现

摘要:
链接下拉菜单是我们在进行web开发时经常遇到的情况。有很多方法可以实现。例如,在客户端链接或回调填充中一次加载数据。前段时间,当我们需要对内部部门进行简单的培训并使用相关的javascript和控件开发时,我们会将其作为一个演示。控件由四部分组成,1:控件的cs代码,2:客户端响应服务器段返回的数据,构建Option的js,以及3。服务器段写入方法的接口以获取数据。4.

联动下拉菜单是我们平时做web开发时经常会遇到的一种情况。有多种实现的方式。比如数据一次加载在客户端联动或者回调填充。前段时间要给部门内部做个简单的培训用到相关的javascript和控件开发的时候,就那这个当作demo来做了。控件大概有4个部分组成,
1:控件的cs代码(AutoFillDDL.cs),2:客户端回应服务器段返回的数据,构建Option的js(AutoFill.js),3.服务器段写获取数据的方法的接口(IXBCallbackHandler)4。发送xmlHTTP请求的类的js(NetLoad.js)
AutoFillDDL.cs

  1一个下拉联动控件的实现第1张using System;
  2一个下拉联动控件的实现第1张using System.Collections.Generic;
  3一个下拉联动控件的实现第1张using System.Text;
  4一个下拉联动控件的实现第1张using System.Web.UI.WebControls;
  5一个下拉联动控件的实现第1张using System.Web.UI;
  6一个下拉联动控件的实现第1张using System.ComponentModel;
  7一个下拉联动控件的实现第1张using Beyondbit.Soft3.WebControl.Designer;
  8一个下拉联动控件的实现第1张
  9一个下拉联动控件的实现第1张[assembly: WebResource("Beyondbit.Soft3.WebControl.Js.AutoFill.js""application/x-javascript")]
 10一个下拉联动控件的实现第1张[assembly: WebResource("Beyondbit.Soft3.WebControl.Js.NetLoad.js""application/x-javascript")]
 11一个下拉联动控件的实现第1张namespace Beyondbit.Soft3.WebControl
 12一个下拉联动控件的实现第12张一个下拉联动控件的实现第13张一个下拉联动控件的实现第14张{
 13一个下拉联动控件的实现第15张    public class AutoFillDDL : Label
 14一个下拉联动控件的实现第16张一个下拉联动控件的实现第17张    一个下拉联动控件的实现第14张{
 15一个下拉联动控件的实现第15张
 16一个下拉联动控件的实现第15张        private string _controlfromrelation = "";
 17一个下拉联动控件的实现第15张        [TypeConverter(typeof(AutoFillControlConvert)), IDReferenceProperty, Category("Behavior"), Themeable(false), DefaultValue(""), Description("需要联动的父的控件")]
 18一个下拉联动控件的实现第15张        public string ControlFromRelation
 19一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
 20一个下拉联动控件的实现第15张            get
 21一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            一个下拉联动控件的实现第14张{
 22一个下拉联动控件的实现第15张                return _controlfromrelation;
 23一个下拉联动控件的实现第31张            }

 24一个下拉联动控件的实现第15张            set
 25一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            一个下拉联动控件的实现第14张{
 26一个下拉联动控件的实现第15张                _controlfromrelation = value;
 27一个下拉联动控件的实现第31张            }

 28一个下拉联动控件的实现第31张        }

 29一个下拉联动控件的实现第15张
 30一个下拉联动控件的实现第15张        private string _controltorelation = "";
 31一个下拉联动控件的实现第15张        [TypeConverter(typeof(AutoFillControlConvert)), IDReferenceProperty, Category("Behavior"), Themeable(false), DefaultValue(""), Description("需要联动的子的控件")]
 32一个下拉联动控件的实现第15张        public string ControlToRelation
 33一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
 34一个下拉联动控件的实现第15张            get
 35一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            一个下拉联动控件的实现第14张{
 36一个下拉联动控件的实现第15张                return _controltorelation;
 37一个下拉联动控件的实现第31张            }

 38一个下拉联动控件的实现第15张            set
 39一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            一个下拉联动控件的实现第14张{
 40一个下拉联动控件的实现第15张                _controltorelation = value;
 41一个下拉联动控件的实现第31张            }

 42一个下拉联动控件的实现第31张        }

 43一个下拉联动控件的实现第15张
 44一个下拉联动控件的实现第15张
 45一个下拉联动控件的实现第17张一个下拉联动控件的实现第16张        方法#region 方法     
 46一个下拉联动控件的实现第15张        protected override void OnPreRender(EventArgs e)
 47一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
 48一个下拉联动控件的实现第15张            ResponseCallBack();    //响应xmlHTTP请求
 49一个下拉联动控件的实现第15张            RegisterCommonScript(); //注册脚本
 50一个下拉联动控件的实现第15张            base.OnPreRender(e);
 51一个下拉联动控件的实现第31张        }

 52一个下拉联动控件的实现第15张        protected virtual void ResponseCallBack()
 53一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
 54一个下拉联动控件的实现第15张            if (this.Page.Request.QueryString["Action"!= null && this.Page.Request.QueryString["Action"== "AutoFill_GetData")
 55一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            一个下拉联动控件的实现第14张{
 56一个下拉联动控件的实现第15张                string eventArgument = this.Page.Request.QueryString["__CALLBACKPARAM"];
 57一个下拉联动控件的实现第15张                string callbackId = this.Page.Request.QueryString["__CALLBACKID"]; 
 58一个下拉联动控件的实现第15张                Page.Response.Clear();
 59一个下拉联动控件的实现第15张                string ret = XBGetCallbackResult(eventArgument,callbackId);
 60一个下拉联动控件的实现第15张                Page.Response.Write(ret);
 61一个下拉联动控件的实现第15张                Page.Response.End();
 62一个下拉联动控件的实现第31张            }
 
 63一个下拉联动控件的实现第31张        }

 64一个下拉联动控件的实现第15张        protected override void Render(HtmlTextWriter writer)
 65一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
 66一个下拉联动控件的实现第15张            //不输出任何内容,除了js,继承label是为了使用它的designer
 67一个下拉联动控件的实现第31张        }

 68一个下拉联动控件的实现第15张        //获取clientID
 69一个下拉联动控件的实现第15张        protected string GetControlRenderID(string name)
 70一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
 71一个下拉联动控件的实现第15张            Control control1 = this.FindControl(name);
 72一个下拉联动控件的实现第15张            if (control1 == null)
 73一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            一个下拉联动控件的实现第14张{
 74一个下拉联动控件的实现第15张                return string.Empty;
 75一个下拉联动控件的实现第31张            }

 76一个下拉联动控件的实现第15张            return control1.ClientID;
 77一个下拉联动控件的实现第31张        }
     
 78一个下拉联动控件的实现第15张       
 79一个下拉联动控件的实现第15张
 80一个下拉联动控件的实现第15张        protected void RegisterCommonScript()
 81一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
 82一个下拉联动控件的实现第15张          this.Page.ClientScript.RegisterClientScriptResource(typeof(AutoFillDDL), "Beyondbit.Soft3.WebControl.Js.NetLoad.js"); 
 83一个下拉联动控件的实现第15张          this.Page.ClientScript.RegisterClientScriptResource(typeof(AutoFillDDL), "Beyondbit.Soft3.WebControl.Js.AutoFill.js");  
 84一个下拉联动控件的实现第15张          string regAutoFill = "\r\n var autofill_" + this.ClientID + " = new AutoFill('"+this.ClientID+"','" + this.GetControlRenderID(this._controlfromrelation) + "','" + this.GetControlRenderID(this._controltorelation) + "');\r\n";
 85一个下拉联动控件的实现第15张          Page.ClientScript.RegisterStartupScript(this.GetType(), "RegAutoFill_" + this.ClientID, regAutoFill, true);           
 86一个下拉联动控件的实现第31张        }

 87一个下拉联动控件的实现第15张
 88一个下拉联动控件的实现第31张        #endregion
 
 89一个下拉联动控件的实现第15张    
 90一个下拉联动控件的实现第15张    
 91一个下拉联动控件的实现第15张        private string XBGetCallbackResult(string eventArgument,string callbackId)
 92一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
 93一个下拉联动控件的实现第15张            return GetJsonStringFromList(GetIXBCallBackReslut(eventArgument, callbackId));                       
 94一个下拉联动控件的实现第31张        }
   
 95一个下拉联动控件的实现第15张
 96一个下拉联动控件的实现第15张    
 97一个下拉联动控件的实现第15张        protected virtual List<ListItem> GetIXBCallBackReslut(string eventArgument, string callbackId)
 98一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
 99一个下拉联动控件的实现第15张            string[] arrArg = eventArgument.Split('|');
100一个下拉联动控件的实现第15张            if (arrArg.Length == 2)
101一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            一个下拉联动控件的实现第14张{
102一个下拉联动控件的实现第15张                ListItem list = new ListItem();
103一个下拉联动控件的实现第15张                list.Text  = arrArg[0!= null && arrArg[0!=""  ? arrArg[0] : "" ;
104一个下拉联动控件的实现第15张                list.Value = arrArg[1!= null && arrArg[1!= "" ? arrArg[1] : "";                
105一个下拉联动控件的实现第15张                if (this is IXBCallbackHandler)  //控件内部实现了接口那么使用控件内部的方法,用于其他继承该控件的子控件
106一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张                一个下拉联动控件的实现第14张{
107一个下拉联动控件的实现第15张                    return ((IXBCallbackHandler)this).GetIXBCallBackReslut(list, callbackId);
108一个下拉联动控件的实现第31张                }

109一个下拉联动控件的实现第15张                else if (this.Page is IXBCallbackHandler)  //页面实现了接口
110一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张                一个下拉联动控件的实现第14张{
111一个下拉联动控件的实现第15张                    return ((IXBCallbackHandler)this.Page).GetIXBCallBackReslut(list, callbackId); ;
112一个下拉联动控件的实现第31张                }

113一个下拉联动控件的实现第15张                else //其他则提示
114一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张                一个下拉联动控件的实现第14张{
115一个下拉联动控件的实现第15张                    List<ListItem> lists = new List<ListItem>();
116一个下拉联动控件的实现第15张                    lists.Add(new ListItem("没有实现IXBCallbackHandler接口"""));
117一个下拉联动控件的实现第15张                    return lists;
118一个下拉联动控件的实现第31张                }

119一个下拉联动控件的实现第31张            }

120一个下拉联动控件的实现第15张            else //下拉表的值或者字中不能包含|字符,也可以用其他字符代替
121一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            一个下拉联动控件的实现第14张{
122一个下拉联动控件的实现第15张                List<ListItem> lists = new List<ListItem>();
123一个下拉联动控件的实现第15张                lists.Add(new ListItem("发生意外错误,可能是你的名称或的值里面包含|"""));
124一个下拉联动控件的实现第15张                return lists;
125一个下拉联动控件的实现第31张            }

126一个下拉联动控件的实现第15张
127一个下拉联动控件的实现第31张        }
   
128一个下拉联动控件的实现第15张        //拼接json字符串
129一个下拉联动控件的实现第15张        protected internal static string GetJsonStringFromList(List<ListItem> list)
130一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        一个下拉联动控件的实现第14张{
131一个下拉联动控件的实现第15张            if (list.Count == 0return "";
132一个下拉联动控件的实现第15张
133一个下拉联动控件的实现第15张            StringBuilder sb = new StringBuilder() ;
134一个下拉联动控件的实现第15张            sb.AppendLine("{options:[");
135一个下拉联动控件的实现第15张            for(int i = 0 ,j =list.Count;i<j ;i++)
136一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            一个下拉联动控件的实现第14张{
137一个下拉联动控件的实现第15张                if( i !=0 ) sb.AppendLine(",") ;
138一个下拉联动控件的实现第15张                sb.AppendLine("{");
139一个下拉联动控件的实现第15张                sb.AppendLine("Text:\""+list[i].Text+"\",");           
140一个下拉联动控件的实现第15张                sb.AppendLine("Value:\""+list[i].Value+"\"");
141一个下拉联动控件的实现第15张                sb.AppendLine("}");
142一个下拉联动控件的实现第31张            }

143一个下拉联动控件的实现第15张            sb.AppendLine("]}");
144一个下拉联动控件的实现第15张            return sb.ToString();
145一个下拉联动控件的实现第31张        }
       
146一个下拉联动控件的实现第31张    }

147一个下拉联动控件的实现第196张}

AutoFill.js

 1一个下拉联动控件的实现第1张//构造函数,用于声明该类 
 2一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张function AutoFill(control,fromDll,toDll)一个下拉联动控件的实现第14张{
 3一个下拉联动控件的实现第15张    this._control=control;  //联动控件的clientID       
 4一个下拉联动控件的实现第15张    //获取联动的发起的下拉表对象
 5一个下拉联动控件的实现第15张    this._fromddllobj=document.all?document.all[fromDll]:document.getElementById(fromDll);
 6一个下拉联动控件的实现第15张    //响应联动的下拉表对象
 7一个下拉联动控件的实现第15张    this._todllobj=document.all?document.all[toDll]:document.getElementById(toDll);
 8一个下拉联动控件的实现第15张    //为解决闭包的问题,把AutoFill的实例付给下拉表对象的一个临时变量
 9一个下拉联动控件的实现第15张    this._fromddllobj.af=this;  
10一个下拉联动控件的实现第15张    //给下拉表附加onchange事件 ,原想使用AttachEvent的方法,
11一个下拉联动控件的实现第15张    //但是这样的附加this的取值就会有问题 ,非下拉表本身而是window对象,
12一个下拉联动控件的实现第15张    //不知道微软在实现上是否有问题,或者是我有问题?
13一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    this._fromddllobj.onchange = function ()一个下拉联动控件的实现第14张{  
14一个下拉联动控件的实现第15张        //当onchange的时候 触发该函数
15一个下拉联动控件的实现第15张        this.af.ajaxfun(this.af._control,this.options[this.selectedIndex].text+"|"+this.options[this.selectedIndex].value,this.af._todllobj); 
16一个下拉联动控件的实现第31张    }
;    
17一个下拉联动控件的实现第196张}
;
18一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张AutoFill.prototype.ajaxfun=function (control,arg,childDll)一个下拉联动控件的实现第14张{    
19一个下拉联动控件的实现第15张    //关于NetLoad,请参阅NetLoad.js
20一个下拉联动控件的实现第15张    var ajax = new NetLoad();
21一个下拉联动控件的实现第15张    var url=ajax.GetPesentUrl() ;   //获取发送的url地址
22一个下拉联动控件的实现第15张    url +=url.indexOf("?")>0?"&":"?" ;
23一个下拉联动控件的实现第15张    url +="Action=AutoFill_GetData&__CALLBACKID="+this.Encode(control)+"&__CALLBACKPARAM="+this.Encode(arg) ;
24一个下拉联动控件的实现第15张    ajax.url =url ;
25一个下拉联动控件的实现第15张    ajax.method="get";    
26一个下拉联动控件的实现第15张    ajax.OpbackObj = childDll ;//回调函数中需要处理的下拉表,也就是  _todllobj对象
27一个下拉联动控件的实现第15张    ajax.callback =this.buildToDDL ;//回调函数
28一个下拉联动控件的实现第15张    ajax.send();    //发送请求
29一个下拉联动控件的实现第196张}
;
30一个下拉联动控件的实现第1张AutoFill.prototype.Encode = function(parameter)
31一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张一个下拉联动控件的实现第14张{
32一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    if (encodeURIComponent) 一个下拉联动控件的实现第14张{
33一个下拉联动控件的实现第15张        return encodeURIComponent(parameter);
34一个下拉联动控件的实现第31张    }

35一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    else 一个下拉联动控件的实现第14张{
36一个下拉联动控件的实现第15张        return escape(parameter);
37一个下拉联动控件的实现第31张    }

38一个下拉联动控件的实现第196张}

39一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张AutoFill.prototype.buildToDDL=function (ret,opObj)一个下拉联动控件的实现第14张{
40一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    if(!opObj)一个下拉联动控件的实现第14张{
41一个下拉联动控件的实现第15张        alert("Error:\nPlease Check Your RP Then Try Again");
42一个下拉联动控件的实现第15张        return ;
43一个下拉联动控件的实现第31张    }
;
44一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    try一个下拉联动控件的实现第14张{      
45一个下拉联动控件的实现第15张        if(ret.responseText == null || ret.responseText ==""return ;        
46一个下拉联动控件的实现第15张        //接受回发的json字符串,并付给该对象 ,可查看图片
47一个下拉联动控件的实现第15张        var json=eval(ret.responseText);
48一个下拉联动控件的实现第15张        opObj.options.length = 0;  //将下拉表的内容清空
49一个下拉联动控件的实现第15张        //循环添加选项 
50一个下拉联动控件的实现第15张        //如果 ,如果节点较多的话可以考虑先声明一个文档片段,然后把选项添加到文档片段
51一个下拉联动控件的实现第15张        //最后将文档对象附加到下拉表
52一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        for(var i=0,j=json.length;i<j;i++)一个下拉联动控件的实现第14张{
53一个下拉联动控件的实现第15张             var option = document.createElement("OPTION");
54一个下拉联动控件的实现第15张             option.value =json[i].Value;
55一个下拉联动控件的实现第15张             option.innerHTML = json[i].Text;     
56一个下拉联动控件的实现第15张             opObj.appendChild(option);            
57一个下拉联动控件的实现第31张        }
;
58一个下拉联动控件的实现第15张        opObj.selectedIndex = 0 ; //默认选中第一个
59一个下拉联动控件的实现第15张        //如果其onchange事件存在,那么触发这个事件,用于多级联动
60一个下拉联动控件的实现第15张        //大家可以注意一下我这里的引用方式opObj["onchange"],效果同 opObj.onchange
61一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        if(opObj["onchange"!= null)一个下拉联动控件的实现第14张{
62一个下拉联动控件的实现第15张            opObj.fireEvent("onchange"); 
63一个下拉联动控件的实现第31张    }

64一个下拉联动控件的实现第31张    }
;
65一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    catch(e)一个下拉联动控件的实现第14张{
66一个下拉联动控件的实现第15张        throw e;
67一个下拉联动控件的实现第15张        //alert(e.description);
68一个下拉联动控件的实现第15张        return ;
69一个下拉联动控件的实现第31张    }

70一个下拉联动控件的实现第15张    ;
71一个下拉联动控件的实现第15张    
72一个下拉联动控件的实现第196张}
;
73一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张AutoFill.prototype.callBackError=function (ret,opObj)一个下拉联动控件的实现第14张{
74一个下拉联动控件的实现第15张    alert("Error:\n"+ret);//未实现    
75一个下拉联动控件的实现第196张}
;

IXBCallbackHandler.cs

 1一个下拉联动控件的实现第1张using System;
 2一个下拉联动控件的实现第1张using System.Collections.Generic;
 3一个下拉联动控件的实现第1张using System.Text;
 4一个下拉联动控件的实现第1张using System.Web.UI.WebControls;
 5一个下拉联动控件的实现第1张
 6一个下拉联动控件的实现第1张namespace Beyondbit.Soft3.WebControl
 7一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张一个下拉联动控件的实现第14张{
 8一个下拉联动控件的实现第15张    public interface IXBCallbackHandler
 9一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    一个下拉联动控件的实现第14张{
10一个下拉联动控件的实现第15张        List<ListItem> GetIXBCallBackReslut(ListItem parent,string callItemId) ;
11一个下拉联动控件的实现第31张    }

12一个下拉联动控件的实现第196张}

NetLoad.js

 1一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张 /**//*
 2一个下拉联动控件的实现第15张@author : xuanye(ilik)
 3一个下拉联动控件的实现第15张@Createdate:2006-12-14
 4一个下拉联动控件的实现第15张@des : xmlHttp请求类
 5一个下拉联动控件的实现第196张*/

 6一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张function NetLoad(smothod,surl,sasync,sOpbackObj,scallback) 一个下拉联动控件的实现第14张{
 7一个下拉联动控件的实现第15张    this.xmlObj = this.CreateObjHttp();
 8一个下拉联动控件的实现第15张    this.method=smothod?smothod:"POST";
 9一个下拉联动控件的实现第15张    this.url = surl?surl:this.GetPesentUrl();
10一个下拉联动控件的实现第15张    this.async=sasync?sasync:true;
11一个下拉联动控件的实现第15张    this.OpbackObj=sOpbackObj?sOpbackObj:null;
12一个下拉联动控件的实现第15张    this.contentXMLDom=null ;    
13一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    this.callback=scallback?scallback:function(cbobj,opobj) 一个下拉联动控件的实现第14张{return;}
14一个下拉联动控件的实现第196张}

15一个下拉联动控件的实现第1张NetLoad.prototype.GetPesentUrl = function()
16一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张一个下拉联动控件的实现第14张{
17一个下拉联动控件的实现第15张    var __theForm = document.forms[0] ;
18一个下拉联动控件的实现第15张    if(__theForm &&__theForm.action)
19一个下拉联动控件的实现第15张    return __theForm.action ;
20一个下拉联动控件的实现第15张    else
21一个下拉联动控件的实现第15张    return window.location.href ;
22一个下拉联动控件的实现第196张}

23一个下拉联动控件的实现第1张NetLoad.prototype.send = function(context)
24一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张一个下拉联动控件的实现第14张{  
25一个下拉联动控件的实现第15张    var netload = this ;    
26一个下拉联动控件的实现第15张    if(!netload.method||!netload.url||!netload.async) return false;
27一个下拉联动控件的实现第15张        netload.xmlObj.open (netload.method, netload.url, netload.async);
28一个下拉联动控件的实现第15张        if(netload.method=="POST") netload.xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
29一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        netload.xmlObj.onreadystatechange=function() 一个下拉联动控件的实现第14张{
30一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张            if(netload.xmlObj.readyState==4一个下拉联动控件的实现第14张{
31一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张                if(netload.xmlObj.status==200一个下拉联动控件的实现第14张{                   
32一个下拉联动控件的实现第15张                    netload.callback(netload.xmlObj,netload.OpbackObj);
33一个下拉联动控件的实现第31张                }

34一个下拉联动控件的实现第31张            }

35一个下拉联动控件的实现第31张        }

36一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        if(netload.method=="POST" && typeof(context) != "undifined" )一个下拉联动控件的实现第14张{     
37一个下拉联动控件的实现第15张            if(netload.contentXMLDom==null)
38一个下拉联动控件的实现第15张                netload.contentXMLDom = netload.GetXmlDom();             
39一个下拉联动控件的实现第15张            netload.contentXMLDom.loadXML(context);
40一个下拉联动控件的实现第15张            netload.xmlObj.send(netload.contentXMLDom);
41一个下拉联动控件的实现第31张        }

42一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        else 一个下拉联动控件的实现第14张{
43一个下拉联动控件的实现第15张            netload.xmlObj.send(null);
44一个下拉联动控件的实现第31张        }

45一个下拉联动控件的实现第196张}

46一个下拉联动控件的实现第1张NetLoad.prototype.GetXmlDom = function()
47一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张一个下拉联动控件的实现第14张{
48一个下拉联动控件的实现第15张      var obj = null;
49一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张      if (typeof(DOMParser) != "undefined"一个下拉联动控件的实现第14张// Gecko、Mozilla、Firefox
50一个下拉联动控件的实现第15张        var parser = new DOMParser();
51一个下拉联动控件的实现第15张        obj = parser.parseFromString(xmlText, "text/xml");
52一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张      }
 else 一个下拉联动控件的实现第14张// IE
53一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        try 一个下拉联动控件的实现第14张{ obj = new ActiveXObject("MSXML2.DOMDocument");} catch (e) 一个下拉联动控件的实现第14张{ }
54一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        if (obj == nulltry 一个下拉联动控件的实现第14张{ obj = new ActiveXObject("Microsoft.XMLDOM"); } catch (e) 一个下拉联动控件的实现第14张{ }
55一个下拉联动控件的实现第31张      }

56一个下拉联动控件的实现第15张      return obj;
57一个下拉联动控件的实现第196张}

58一个下拉联动控件的实现第1张NetLoad.prototype.CreateObjHttp = function()
59一个下拉联动控件的实现第198张一个下拉联动控件的实现第13张一个下拉联动控件的实现第14张{
60一个下拉联动控件的实现第15张    var xhttp = null;
61一个下拉联动控件的实现第15张    if(window.XMLHttpRequest)
62一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    一个下拉联动控件的实现第14张//IE7, Mozilla ,Firefox 
63一个下拉联动控件的实现第15张      xhttp = new XMLHttpRequest();      
64一个下拉联动控件的实现第31张    }

65一个下拉联动控件的实现第15张    else if(window.ActiveXObject)
66一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张    一个下拉联动控件的实现第14张//IE6、IE5
67一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张      try一个下拉联动控件的实现第14张
68一个下拉联动控件的实现第15张         xhttp = new ActiveXObject("Msxml2.XMLHTTP");
69一个下拉联动控件的实现第31张      }
 
70一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张      catch (e)一个下拉联动控件的实现第14张{ ; }      
71一个下拉联动控件的实现第15张      if( xhttp == null)
72一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张      一个下拉联动控件的实现第14张{
73一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张       try 一个下拉联动控件的实现第14张{
74一个下拉联动控件的实现第15张            xhttp = new ActiveXObject("Microsoft.XMLHTTP");
75一个下拉联动控件的实现第31张        }

76一个下拉联动控件的实现第23张一个下拉联动控件的实现第17张        catch (e)一个下拉联动控件的实现第14张{; }   
77一个下拉联动控件的实现第31张      }
    
78一个下拉联动控件的实现第31张    }

79一个下拉联动控件的实现第15张    return xhttp;
80一个下拉联动控件的实现第196张}

本来回调使用的是微软本身的ICallBack但是在实现多级关联的时候,即回调中又触发另外一次回调的时候js报错了,大概看了一下,应该是用了全局变量,在第二次回调的时候变量的值又被改变了。循环因子大于索引了。。 代码大部份已经给了详细的注释。。
汗,忘了讲怎么调用了,
编译成dll之后,在工具栏拖到页面上即可使用多级联动就拖多个,对应不同的父子关系
可以在使用的页面或者继承该控件的子控件中实现IXBCallbackHandler接口,

parent就是触发联动的下拉菜单的选中项的,callItemID就是联动控件的ClientID,在多级联动中可以根据这个判断这个值来判断是哪个回调,然后相应的返回各自的对应数据
取数据的方法是自己定义的返回一个ListItem的数组即可,因为没有放演示的空间 。。唉

免责声明:文章转载自《一个下拉联动控件的实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gcc系列工具 介绍SQL Server 2016 行级别权限控制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

DEP(数据执行保护)介绍

数据执行保护是一组软件和硬件技术,可以对内存执行额外检查,以帮助防止恶意代码在系统上运行。硬件实现DEP来检测从这些位置运行的代码,并在发现执行时抛出异常。此功能也称为非执行和执行保护。为了与DEP合作,AMD和微软共同设计并开发了AMD的新芯片功能“增强病毒防护”。[1] DEP的安全机制,即“数据执行保护”,是一种Windows安全机制,主要用于防止病毒...

oracle触发器调试

如果触发器执行成功,不会出现第4个图,不成功,会出现数据调试信息,具体报错位置会定位到。F7单步执行4.出错时,会出现调试数据,双击调试数据,可以复制出来...

Crontab详细用法-定时任务详解

LWC“八个字符,有效范围为0-31个月的整数:可以出现”,-*/“四个字符,无效范围为1-12或JAN DECDayofWeek:可以出现”。-*/?因为月日和周日将相互影响。例如,在“分钟”字段中使用5,20表示它将在每分钟的5和20分钟触发一次。50:表示它只能出现在周日和月日域中。如果在DayofWeek域中使用5L,这意味着它将在最后一个星期四触发...

uniapp 实现动态切换全局主题色

要求:要在开发的应用程序中切换主题颜色,如果只需要一种主题颜色,但不需要切换,则可以使用uniappSCSS文件文档思想:预先在公共css中定义所需的主题颜色。这里只是一个定义两种颜色的参考文档的示例,可以从中获得想法。您可以使用css属性选择器动态设置数据xx以动态更改主题颜色。最初,您希望将一个变量直接混合到mixin中,以实现主题颜色的全局控制,忽略了...

JWT加密解密

token2、使用https传输协议。这点是最主要的,前面3的未必能够100%保证安全)JWT由三部分组成,可以把用户名、角色等无关紧要的信息保存到Payload部分。Header:base64enc  //eyAiYWxnIjoiSFMyNTYiLCJUWVBFIjoiSldUIn0=Payload:base64enc  //用户的关键信息eyJ1c2Vy...

如何让FireFox/chrome新打开的标签页在后台打开,而不是立即跳转过去

Firefox:在地址栏中输入about:config以查找以下三项,所有这些项都设置为true browser。选项卡。加载后台浏览器。选项卡。加载DivertedInBackgroundbrowser。tabs LoadBookmarksInBackgroundchrome:Mac OS:按住命令键,用鼠标单击,您可以在后台打开一个新选项卡,进入Goog...