求.net Ajax无刷新dropdownlist两级或三级联动代码,数据是从数据库绑定。

jiaweihan_001 2011-02-15 11:27:36
我在做联动无刷新,但是一直没有好的代码,我想点country,然后出现city,然后点city,就跳转到city页面,同时,还有一个dropdownlist用来绑定酒店,一跳转到city页面,下面的dropdownlist马上绑定city下的所有酒店。

能不能做到点country,出现city的时候,页面不刷新,只有点击city的时候,跳转city页面才刷新,同时传city的ID,然后下一个dropdownlist获取city的ID ,同时绑定出所有的酒店。

听起来有点绕口,大家给点建议,或者有好的代码,发给我,学习啊,谢谢,
...全文
1158 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
嘿巴卡玛卡 2012-12-23
  • 打赏
  • 举报
回复
各位大神,请问在联动时,我对第一个DropDownList1选中后,联动DropDownList2、DropDownList3却都是空白!!加了母版页,但是我已经改了ID,以前有个联动列子是没问题的,……究竟是什么问题!!
Adechen 2011-02-15
  • 打赏
  • 举报
回复
使用updatepanel 就可实现不刷新的效果,
luxingchang1979 2011-02-15
  • 打赏
  • 举报
回复
在后台比较好书写。
11楼可以直接采用
shine_fly 2011-02-15
  • 打赏
  • 举报
回复
很清楚了,页面调用:
<td>
<%=new WebUI.Append.Append().ToString()%>
</td>
jiaweihan_001 2011-02-15
  • 打赏
  • 举报
回复
大家都没有好的建议了吗啊,还是都去吃饭了啊,
jiaweihan_001 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 shine_fly 的回复:]
给你一个我自己用的吧,调用就直接在ASPX页面New就OK了。

C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WebUI.Append
{
public class Append
{
……
[/Quote]

你好,能不能给完整一点的代码,如何调用啊,?
shine_fly 2011-02-15
  • 打赏
  • 举报
回复
我的方法是写在Header里的,下面是获取省的,市区的一样。
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class GetProvince : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
string id = context.Request.QueryString["id"];
if (id == null) return;
List<Model.Province> provinces = new BLL.Province().GetList("", "AreaID='" + id + "'", "");
context.Response.Write("<option value='0'>选择省份</option>");
foreach (Model.Province province in provinces)
{
context.Response.Write("<option value='" + province.ProvinceID + "'>");
context.Response.Write(province.ProvinceName);
context.Response.Write("</option>");
}
}

public bool IsReusable
{
get
{
return false;
}
}
}
laowang134 2011-02-15
  • 打赏
  • 举报
回复
不知道楼主现在实现到了什么地步。。
jiaweihan_001 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ranshouxu 的回复:]
ajax 套用一下就可以了

C# code

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Conten……
[/Quote]


妹妹,你这样是可以,但是我想的效果是,点第一个dropdownlist1,出项第二个,点第二个的时候,就跳转各自对应的页面,这个时候,点第二个,就报错了,
shine_fly 2011-02-15
  • 打赏
  • 举报
回复
给你一个我自己用的吧,调用就直接在ASPX页面New就OK了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WebUI.Append
{
public class Append
{
public override string ToString()
{
StringBuilder html = new StringBuilder();
#region --省市区联动
html.Append("<script type='text/javascript'>");
html.Append("function getprovince(id)\n");
html.Append("{\n");
html.Append("$(\".province\").html(\"<option>加载中...</option>\");\n");
html.Append("$(\".city\").html(\"<option value='0'>选择城市</option>\");\n");
html.Append("$.ajax({\n");
html.Append("type:\"get\",\n");
html.Append("url:\"/page/Base/ajax/GetProvince.ashx\",\n");
html.Append("data:encodeURI(\"id=\"+id),\n");
html.Append("dataType:\"html\",\n");
html.Append("success:function(data){\n");
html.Append("$(\".province\").html(data);\n");
html.Append("},\n");
html.Append("error:function(data){\n");
html.Append("alert(data);\n");
html.Append("}\n");
html.Append("});\n");
html.Append("}\n");
html.Append("\n");
html.Append("function getCity(id)\n");
html.Append("{\n");
html.Append("//清空城市和区县列表\n");
html.Append("$(\".city\").html(\"<option>加载中...</option>\");\n");
html.Append("$(\".district\").html(\"<option value='0'>选择区县</option>\");\n");
html.Append("$.ajax({\n");
html.Append("type:\"get\",\n");
html.Append("url:\"/page/Base/ajax/Getcity.ashx\",\n");
html.Append("data:\"id=\"+id,\n");
html.Append("dataType:\"html\",\n");
html.Append("success:function(data){\n");
html.Append("$(\".city\").html(data);\n");
html.Append("},\n");
html.Append("error:function(data){\n");
html.Append("alert(data);\n");
html.Append("}\n");
html.Append("});\n");
html.Append("}\n");
html.Append("\n");
html.Append("function getDistrict(id)\n");
html.Append("{\n");
html.Append("$(\".district\").html(\"<option>加载中...</option>\");\n");
html.Append("$.ajax({\n");
html.Append("type:\"get\",\n");
html.Append("url:\"/page/Base/ajax/GetDistrict.ashx\",\n");
html.Append("data:\"id=\"+id,\n");
html.Append("dataType:\"html\",\n");
html.Append("success:function(data){\n");
html.Append("$(\".district\").html(data);\n");
html.Append("},\n");
html.Append("error:function(data){\n");
html.Append("alert(data);\n");
html.Append("}\n");
html.Append("});\n");
html.Append("}\n");
html.Append("</script>");
html.Append("<table style='width:150px;'>");
List<Model.Area> areas = new BLL.Area().GetAllList();

html.Append("<tr>");
html.Append("<td>");
//html.Append("大区");
html.Append("<select name='area' class='area' onchange='getprovince($(this).val())'>");
html.Append("<option value='0'>选择大区</option >");
foreach (Model.Area row in areas)
{
html.Append("<option value='" + row.AreaID + "'>" + row.AreaName + "</option>");
}
html.Append("</select>");
html.Append("</td>");
html.Append("<td>");
html.Append("<select name='province' class='province' onchange='getCity($(this).val())'>");
html.Append("<option value='0'>选择省份</option >");
html.Append("</select>");
html.Append("</td>");
html.Append("<td>");
//html.Append("城市");
html.Append("<select name='city' class='city' onchange='getDistrict($(this).val())'>");
html.Append("<option value='0'>选择城市</option>");
html.Append("</select>");
html.Append("</td>");
html.Append("<td>");
//html.Append("区县");
html.Append("<select name='district' class='district'>");
html.Append("<option value='0'>选择区县</option>");
html.Append("</select>");
html.Append("</td>");
html.Append("</tr>");
html.Append("</table>");
return html.ToString();
#endregion
}
}
}
jiaweihan_001 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hookyzlr 的回复:]
利用ajax控件CascadingDropDown + webservice
前台代码:

<ajaxToolkit:CascadingDropDown ID="CascadingDropDown1" runat="server" TargetControlID="provinceDr"
ServicePath="GetDLDetailInfo.asmx" ServiceMethod=……
[/Quote]
这位大哥,你这个看的我头脑斗不清楚了,理解不了。。。。
jiaweihan_001 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 coley 的回复:]
http://www.cnblogs.com/zhangyu028/articles/310568.html
[/Quote]

我是做web页面的,你这个我试过,但是不行,就是点了第一个,第二个数据绑不上去,没成功,最后放弃了。
jiaweihan_001 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyq11 的回复:]
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlLB" runat……
[/Quote]

其实你这个我懂,就是如果我想点ddlChild时,再跳转页面时,就会报错了,像这样的代码

<asp:DropDownList ID="ddlChild" runat="server" Width="15%" AutoPostBack="True" OnSelectedIndexChanged="ddlChild_SelectedIndexChanged">

星空蔚蓝 2011-02-15
  • 打赏
  • 举报
回复
ajax 套用一下就可以了

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
//代码
</ContentTemplate>
</asp:UpdatePanel>
hookyzlr 2011-02-15
  • 打赏
  • 举报
回复
利用ajax控件CascadingDropDown + webservice
前台代码:

<ajaxToolkit:CascadingDropDown ID="CascadingDropDown1" runat="server" TargetControlID="provinceDr"
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>


webservice中对应方法:

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Collections.Generic;
using System.Collections.Specialized;
using DataAccess;
using AjaxControlToolkit;
using BLL;

/// <summary>
/// GetDLDetailInfo 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class GetDLDetailInfo : System.Web.Services.WebService
{
private DataTable _myTable;
private province _myProvinceOper = new province();
private List<CascadingDropDownNameValue> _values;

public GetDLDetailInfo()
{

//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}

[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();
}
}
子夜__ 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jiaweihan_001 的回复:]

引用 1 楼 wxr0323 的回复:
3级联动无刷新是吧


可以用JS。。

3级联动 无刷新的例子好多。

JS 省市联动

这个也可以


哥哥我说的是,数据要从数据库绑定啊。
[/Quote]

我给你的就是从数据库取的

第二个DEMO 里面包含省市区的数据库。。
jiaweihan_001 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wxr0323 的回复:]
3级联动无刷新是吧


可以用JS。。

3级联动 无刷新的例子好多。

JS 省市联动

这个也可以
[/Quote]

哥哥我说的是,数据要从数据库绑定啊。
coley 2011-02-15
  • 打赏
  • 举报
回复
http://www.cnblogs.com/zhangyu028/articles/310568.html
wuyq11 2011-02-15
  • 打赏
  • 举报
回复
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlLB" runat="server" Width="15%" AutoPostBack="True" OnSelectedIndexChanged="ddlLB_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="ddlChild" runat="server" Width="20%">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
</div>
protected void ddlLB_SelectedIndexChanged(object sender, EventArgs e)
{
if(this.ddlLB.SelectedValue!=null)
{
BindChild(this.ddlLB.SelectedValue);
}
}
子夜__ 2011-02-15
  • 打赏
  • 举报
回复
3级联动无刷新是吧


可以用JS。。

3级联动 无刷新的例子好多。

JS 省市联动

这个也可以
加载更多回复(7)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧