最近看到很多人都在问关于联动的问题,于是决定把上个项目做的联动发出来大家参考,因为当时也是在网上参考了的,若有雷同纯属正常情况。。自己写的一个用户控件,三个DROPDOWNLIST实现省市县的三级联动。话不多说,先来看代码。<%@ Control Language="C#" ClassName="AreaCode" %><script runat="server">
bool setValue;
protected void Page_Load(object sender, EventArgs e)
{
ddlProvince.Attributes["onchange"] = "Province('" + ddlProvince.ClientID + "','" + ddlCity.ClientID + "','" + ddlCounty.ClientID + "');";
ddlCity.Attributes["onchange"] = "City('" + ddlCity.ClientID + "','" + ddlCounty.ClientID + "');";
if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "AreaCode"))
{
string script = @"
function Province(_province,_city,_county)
{
var svalue = document.all(_province).value;
var webFileUrl = ""/Manage/Dict/AreaCode.ashx?Province="" + svalue;//这个是ASHX一般应用程序处理文件,由自己,下面我也会公布出来
var result = """";
var xmlHttp = new ActiveXObject(""MSXML2.XMLHTTP"");
xmlHttp.open(""GET"", webFileUrl, false);
xmlHttp.send("""");
result = xmlHttp.responseText;
if(result != """")
{
document.all(_city).length=0;
var piArray = result.split("","");
for(var i=0;i<piArray.length;i++)
{
var ary1 = piArray[i].toString().split(""|"");
document.all(_city).options.add(new Option(ary1[0].toString(),ary1[1].toString()));
}
City(_city,_county);
}
else
{
//alert(result);
}
}
//以XML求取City的数据
function City(_city,_county)
{
var svalue = document.all(_city).value;
var webFileUrl = ""/Manage/Dict/AreaCode.ashx?City="" + svalue;
var result = """";
var xmlHttp = new ActiveXObject(""MSXML2.XMLHTTP"");
xmlHttp.open(""GET"", webFileUrl, false);
xmlHttp.send("""");
result = xmlHttp.responseText;
if(result != """")
{
document.all(_county).length=0;
var piArray = result.split("","");
for(var i=0;i<piArray.length;i++)
{
var ary1 = piArray[i].toString().split(""|"");
document.all(_county).options.add(new Option(ary1[0].toString(),ary1[1].toString()));
}
}
else
{
//alert(result);
}
}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "AreaCode", script, true);
}
if (!setValue && !Page.IsPostBack)
{
ddlProvince.DataSource = global::Dict.GetProvince();
ddlProvince.DataTextField = "Name";
ddlProvince.DataValueField = "Code";
ddlProvince.DataBind();
ddlProvince.SelectedValue = "510000"; ddlCity.DataSource = global::Dict.GetCity(ddlProvince.SelectedValue);
ddlCity.DataTextField = "Name";
ddlCity.DataValueField = "Code";
ddlCity.DataBind(); ddlCounty.DataSource = global::Dict.GetCounty(ddlCity.SelectedValue);
ddlCounty.DataTextField = "Name";
ddlCounty.DataValueField = "Code";
ddlCounty.DataBind();
}
} public string Value
{
get
{
return Request.Form[ddlCounty.ClientID.Replace("_", "$")];
}
set
{
if (string.IsNullOrEmpty(value)) return;
if (ddlProvince.Items.Count == 0)
{
ddlProvince.DataSource = global::Dict.GetProvince();
ddlProvince.DataTextField = "Name";
ddlProvince.DataValueField = "Code";
ddlProvince.DataBind();
}
ddlProvince.SelectedValue = value.Substring(0, 2) + "0000";
ddlCity.DataSource = global::Dict.GetCity(ddlProvince.SelectedValue);
ddlCity.DataTextField = "Name";
ddlCity.DataValueField = "Code";
ddlCity.DataBind();
ddlCity.SelectedValue = value.Substring(0, 4) + "00"; ddlCounty.DataSource = global::Dict.GetCounty(ddlCity.SelectedValue);
ddlCounty.DataTextField = "Name";
ddlCounty.DataValueField = "Code";
ddlCounty.DataBind();
ddlCounty.SelectedValue = value;
setValue = true;
}
}
</script>
<asp:DropDownList ID="ddlProvince" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddlCity" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddlCounty" runat="server">
</asp:DropDownList>//下面是ASHX的源码<%@ WebHandler Language="C#" Class="AreaCode" %>using System;
using System.Web;
using System.Text;
using System.Linq;
public class AreaCode : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Clear();
PoliceOAModel.PoliceOAEntities model = new PoliceOAModel.PoliceOAEntities();//这里是ADO.NET ENTITY 。取数据库数据的 StringBuilder sb = new StringBuilder();
if (!string.IsNullOrEmpty(context.Request["Province"]))
{
foreach (PoliceOAModel.AreaCode area in global::Dict.GetCity(context.Request["Province"]))
{
if (sb.ToString() == "")
{
sb.Append(area.Name + "|" + area.Code);
}
else
{
sb.Append("," + area.Name + "|" + area.Code);
}
}
}
else if (!string.IsNullOrEmpty(context.Request["City"]))
{
foreach (PoliceOAModel.AreaCode area in global::Dict.GetCounty(context.Request["City"]))
{
if (sb.ToString() == "")
{
sb.Append(area.Name + "|" + area.Code);
}
else
{
sb.Append("," + area.Name + "|" + area.Code);
}
}
}
model.Dispose();
context.Response.Write(sb.ToString());
}
public bool IsReusable {
get {
return false;
}
}}这样写的好处就是在页面赋值的时候,我只用赋值一个VALUE 就可以指定三个DROPDOWNLIST的选择项。开发过程中是很方便的。
如果大家有更好的方法,可以提出来一起学习
bool setValue;
protected void Page_Load(object sender, EventArgs e)
{
ddlProvince.Attributes["onchange"] = "Province('" + ddlProvince.ClientID + "','" + ddlCity.ClientID + "','" + ddlCounty.ClientID + "');";
ddlCity.Attributes["onchange"] = "City('" + ddlCity.ClientID + "','" + ddlCounty.ClientID + "');";
if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "AreaCode"))
{
string script = @"
function Province(_province,_city,_county)
{
var svalue = document.all(_province).value;
var webFileUrl = ""/Manage/Dict/AreaCode.ashx?Province="" + svalue;//这个是ASHX一般应用程序处理文件,由自己,下面我也会公布出来
var result = """";
var xmlHttp = new ActiveXObject(""MSXML2.XMLHTTP"");
xmlHttp.open(""GET"", webFileUrl, false);
xmlHttp.send("""");
result = xmlHttp.responseText;
if(result != """")
{
document.all(_city).length=0;
var piArray = result.split("","");
for(var i=0;i<piArray.length;i++)
{
var ary1 = piArray[i].toString().split(""|"");
document.all(_city).options.add(new Option(ary1[0].toString(),ary1[1].toString()));
}
City(_city,_county);
}
else
{
//alert(result);
}
}
//以XML求取City的数据
function City(_city,_county)
{
var svalue = document.all(_city).value;
var webFileUrl = ""/Manage/Dict/AreaCode.ashx?City="" + svalue;
var result = """";
var xmlHttp = new ActiveXObject(""MSXML2.XMLHTTP"");
xmlHttp.open(""GET"", webFileUrl, false);
xmlHttp.send("""");
result = xmlHttp.responseText;
if(result != """")
{
document.all(_county).length=0;
var piArray = result.split("","");
for(var i=0;i<piArray.length;i++)
{
var ary1 = piArray[i].toString().split(""|"");
document.all(_county).options.add(new Option(ary1[0].toString(),ary1[1].toString()));
}
}
else
{
//alert(result);
}
}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "AreaCode", script, true);
}
if (!setValue && !Page.IsPostBack)
{
ddlProvince.DataSource = global::Dict.GetProvince();
ddlProvince.DataTextField = "Name";
ddlProvince.DataValueField = "Code";
ddlProvince.DataBind();
ddlProvince.SelectedValue = "510000"; ddlCity.DataSource = global::Dict.GetCity(ddlProvince.SelectedValue);
ddlCity.DataTextField = "Name";
ddlCity.DataValueField = "Code";
ddlCity.DataBind(); ddlCounty.DataSource = global::Dict.GetCounty(ddlCity.SelectedValue);
ddlCounty.DataTextField = "Name";
ddlCounty.DataValueField = "Code";
ddlCounty.DataBind();
}
} public string Value
{
get
{
return Request.Form[ddlCounty.ClientID.Replace("_", "$")];
}
set
{
if (string.IsNullOrEmpty(value)) return;
if (ddlProvince.Items.Count == 0)
{
ddlProvince.DataSource = global::Dict.GetProvince();
ddlProvince.DataTextField = "Name";
ddlProvince.DataValueField = "Code";
ddlProvince.DataBind();
}
ddlProvince.SelectedValue = value.Substring(0, 2) + "0000";
ddlCity.DataSource = global::Dict.GetCity(ddlProvince.SelectedValue);
ddlCity.DataTextField = "Name";
ddlCity.DataValueField = "Code";
ddlCity.DataBind();
ddlCity.SelectedValue = value.Substring(0, 4) + "00"; ddlCounty.DataSource = global::Dict.GetCounty(ddlCity.SelectedValue);
ddlCounty.DataTextField = "Name";
ddlCounty.DataValueField = "Code";
ddlCounty.DataBind();
ddlCounty.SelectedValue = value;
setValue = true;
}
}
</script>
<asp:DropDownList ID="ddlProvince" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddlCity" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddlCounty" runat="server">
</asp:DropDownList>//下面是ASHX的源码<%@ WebHandler Language="C#" Class="AreaCode" %>using System;
using System.Web;
using System.Text;
using System.Linq;
public class AreaCode : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Clear();
PoliceOAModel.PoliceOAEntities model = new PoliceOAModel.PoliceOAEntities();//这里是ADO.NET ENTITY 。取数据库数据的 StringBuilder sb = new StringBuilder();
if (!string.IsNullOrEmpty(context.Request["Province"]))
{
foreach (PoliceOAModel.AreaCode area in global::Dict.GetCity(context.Request["Province"]))
{
if (sb.ToString() == "")
{
sb.Append(area.Name + "|" + area.Code);
}
else
{
sb.Append("," + area.Name + "|" + area.Code);
}
}
}
else if (!string.IsNullOrEmpty(context.Request["City"]))
{
foreach (PoliceOAModel.AreaCode area in global::Dict.GetCounty(context.Request["City"]))
{
if (sb.ToString() == "")
{
sb.Append(area.Name + "|" + area.Code);
}
else
{
sb.Append("," + area.Name + "|" + area.Code);
}
}
}
model.Dispose();
context.Response.Write(sb.ToString());
}
public bool IsReusable {
get {
return false;
}
}}这样写的好处就是在页面赋值的时候,我只用赋值一个VALUE 就可以指定三个DROPDOWNLIST的选择项。开发过程中是很方便的。
如果大家有更好的方法,可以提出来一起学习
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货