现在存在一个上下级的关系,只有两个级别。
比如:省份、城市。
我要做两个下拉列表,省份下拉列表里的值改变以后,城市下拉列表里的内容要动态变化成该省的城市。
但是现在有个难题就是,当我选择了一个省份以后,怎么知道它有哪些市。
我本来想通过ajax去数据库动态查询的,但是为了减轻数据库和服务器的压力,以及考虑到响应速度,所以放弃了。
那我想现在就只有一种办法了,将这种对应关系存在页面上。
请教大家如何看待这个问题!谢谢!
比如:省份、城市。
我要做两个下拉列表,省份下拉列表里的值改变以后,城市下拉列表里的内容要动态变化成该省的城市。
但是现在有个难题就是,当我选择了一个省份以后,怎么知道它有哪些市。
我本来想通过ajax去数据库动态查询的,但是为了减轻数据库和服务器的压力,以及考虑到响应速度,所以放弃了。
那我想现在就只有一种办法了,将这种对应关系存在页面上。
请教大家如何看待这个问题!谢谢!
解决方案 »
- 在64位系统上开发出来的项目运行在32位系统上会不会出错?
- 名为“1”的列已属于此 DataTable。
- 这个问题出在哪里呢?晕 马上给分
- 如和用fileUpLoad选择完图片后立即在页面上显示
- 调用webservice,要求soap头中验证,怎么发送?
- vs2005和SQL2000连接的问题。。高分
- 老天呀,这是怎么一回事,急死人了,关于文本格式的问题!
- 程序集清单与程序引用不一致带来的问题
- 救命~~~我做的一个网站现在无法测试,请高手帮我测试
- 水晶报表高手请进,水晶文件怎样使用xml文件作为数据源,急急急,在线守候,立即加分
- 高分求助:建立自己网站的全部流程
- 关于VS2010和SQL Server 2008的问题、
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="WebIhttpModule.login" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
var arryprv = new Array(<%= cityarray%>);
function ChangeProv(obj) {
var objcity = document.getElementById('SlctCity');
var s = obj.options[obj.selectedIndex].value;
objcity.options.length = 0;
if (s == '0') {
objcity.style.display = 'none';
document.getElementById('err_addr').style.display = '';
return;
}
else {
document.getElementById('err_addr').style.display = 'none';
}
objcity.style.display = '';
var optn = document.createElement('option');
optn.value = '0';
optn.innerHTML = '所在城市';
objcity.appendChild(optn);
for (var i = 0; i < arryprv.length; i++) {
var arr = arryprv[i];
if (arr[0] == s) {
var opt = document.createElement('option');
opt.value = arr[1];
opt.innerHTML = arr[2];
objcity.appendChild(opt);
}
}
}
</script></head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
<select name="SlctProvince" id="SlctProvince" onchange="ChangeProv(this);">
<option value="0" selected="selected">所在省份</option>
<%# province%>
</select>
</td>
<td>
<select name="SlctCity" id="SlctCity" style="display: none;">
</select>
<p class="content" id="err_addr" style="display: none;">
<label class="f-label">
</label>
<span class="reshow">请选择目前你所居住地。</span>
</p>
</td>
</tr>
</table>
</div>
</form>
</body>
</html> public partial class login : System.Web.UI.Page
{
protected string province = string.Empty;
protected string cityarray = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<Dict_AreaInfo> areas = new List<Dict_AreaInfo>() {
new Dict_AreaInfo(1,0,"湖北省",false),
new Dict_AreaInfo(2,0,"湖南省",false),
new Dict_AreaInfo(3,1,"武汉市",false),
new Dict_AreaInfo(4,1,"宜昌市",false),
new Dict_AreaInfo(5,2,"长沙市",false),
new Dict_AreaInfo(6,2,"株洲市",false)
};
foreach (Dict_AreaInfo info in areas)
{
if (info.ParentID.Equals(0))
{
province += "<option value=\"" + info.ID + "\">" + info.Name + "</option>";
}
else
{
if (!cityarray.Equals(string.Empty))
cityarray += ",";
cityarray += "new Array('" + info.ParentID + "','" + info.ID + "','" + info.Name + "')";
}
}
}
Page.DataBind();
}
}
public class Dict_AreaInfo
{
public Dict_AreaInfo(int id, int pid, string name, bool islock)
{
this.ID = id;
this.ParentID = pid;
this.Name = name;
this.IsLock = islock;
} /// <summary>
/// 自增长编号
/// </summary>
private int _ID;
public int ID
{
set { _ID = value; }
get { return _ID; }
}
/// <summary>
/// 父级编号(如无上一级则为:0)
/// </summary>
private int _ParentID;
public int ParentID
{
set { _ParentID = value; }
get { return _ParentID; }
}
/// <summary>
/// 名称
/// </summary>
private string _Name;
public string Name
{
set { _Name = value; }
get { return _Name; }
}
/// <summary>
/// 是否锁定
/// </summary>
private bool _IsLock;
public bool IsLock
{
set { _IsLock = value; }
get { return _IsLock; }
}
}
ServicePath="GetDLDetailInfo.asmx" ServiceMethod="GetProvince" Category="province"
PromptValue="0" ParentControlID="" LoadingText="加载省份.." PromptText="请选择省份">
</ajaxToolkit:CascadingDropDown>
<ajaxToolkit:CascadingDropDown ID="CascadingDropDown2" runat="server" TargetControlID="cityDr"
ServicePath="GetDLDetailInfo.asmx" ServiceMethod="GetCityByProvince" Category="city"
ParentControlID="provinceDr" LoadingText="加载城市.." PromptText="请选择城市">
</ajaxToolkit:CascadingDropDown>
<ajaxToolkit:CascadingDropDown ID="CascadingDropDown3" runat="server" TargetControlID="areaDr"
ServicePath="GetDLDetailInfo.asmx" ServiceMethod="GetAreaByCity" Category="area"
ParentControlID="cityDr" LoadingText="加载地区.." PromptText="请选择地区">
</ajaxToolkit:CascadingDropDown>
地区选择:<asp:DropDownList ID="provinceDr" runat="server" Width="128px">
</asp:DropDownList>
<asp:DropDownList ID="cityDr" runat="server" Width="160px">
</asp:DropDownList>
<asp:DropDownList ID="areaDr" runat="server" Width="151px">
</asp:DropDownList>webServie方法:
[WebMethod]
public CascadingDropDownNameValue[] GetProvince(string knownCategoryValues, string category)
{
_myTable = _myProvinceOper.SelectAllProvince();
_values = new List<CascadingDropDownNameValue>(); foreach (DataRow _r in _myTable.Rows)
{
_values.Add(new CascadingDropDownNameValue(_r["province"].ToString(), _r["provinceID"].ToString()));
}
return _values.ToArray();
} [WebMethod]
public CascadingDropDownNameValue[] GetCityByProvince(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues); int _provinceID;
if (!kv.ContainsKey("province") || !Int32.TryParse(kv["province"], out _provinceID))
{
return null;
} _myTable = _myProvinceOper.SelectAllCity(_provinceID);
_values = new List<CascadingDropDownNameValue>(); foreach (DataRow _r in _myTable.Rows)
{
_values.Add(new CascadingDropDownNameValue(_r["city"].ToString(), _r["cityID"].ToString()));
}
return _values.ToArray();
} [WebMethod]
public CascadingDropDownNameValue[] GetAreaByCity(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
int _cityID;
if (!kv.ContainsKey("city") || !Int32.TryParse(kv["city"], out _cityID))
{
return null;
}
_myTable = _myProvinceOper.SelectAllArea(_cityID);
_values = new List<CascadingDropDownNameValue>(); foreach (DataRow _r in _myTable.Rows)
{
_values.Add(new CascadingDropDownNameValue(_r["area"].ToString(), _r["areaID"].ToString()));
}
return _values.ToArray();
}有需要联系我。给你发源码
一般是js联动 如果你要用数据库的话 记value 根据value值去取
将省、市以变量的形式定义到js文件中,每次只是调用一下方法而矣
而且js文件可以被缓存