问个关于使用Ajax实现二级Dropdownlist的问题

listen 2009-02-04 01:50:28
在Deailsview中使用CascadingDropDown来做两个DropDownList的级联
并且用RequiredFieldValidator来检查这两个DropDownList必选项,
级联的功能都实现,但是在保存的时候发生问题,以下:
Save时,页面刷新,再表示时,显示这两个列表框没有选择,
而且数据也没有保存到DB里,不知道为什么?

想知道 ,可不可能是代码写的问题呢?
或是有什么可能的问题导致了这个现象呢??
...全文
201 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
listen 2009-02-26
  • 打赏
  • 举报
回复
楼上的兄弟,也非常非常感谢你能关注本贴!!

非常不好意思,我没有说明白,给大家造成了误解!

查询数据库来产生数据,我也能实现,
我不能实现的是,在向DB保存的时候,如果第一级发生变化了,第二级的值就不能保存到DB里了

具体的代码和问题请参照以下的贴子,恳请各位大侠能够帮助!!

http://topic.csdn.net/u/20090207/21/a7f49007-8cb8-4447-a50e-e4765cffd809.html
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 listen 的回复:]
兄弟们,非常感谢你们给我贴了这么多的代码,
不过这些代码在网上都能找到,可是解决不了问题,
你们给的代码都是在实现联动,并没有实现数据的绑定

我查了很多资料,发现,用这种方法,写DB的时候,是取不出数据
[/Quote]

他们所贴的方法,GetProvincesForCountry 之类的方法,虽然写得是在内存中创建一个数组然后输出这个数据数组,你稍微改为查询数据库产生输出,应该没有什么编程困难吧?!
  • 打赏
  • 举报
回复
参考 http://www.asp.net/AJAX/AjaxControlToolkit/Samples/CascadingDropDown/CascadingDropDown.aspx

asp.net ajax controltoolkit中的这个下拉控件控制非常方便,只要简单设置一下就可以。而且,从控件到demo都是开源的,我在它的源代码中放入一个button来测试页面回发,它完全正确地保持了DropdownList控件的选择值,证明它比其它ajax更加经得起编程考验!
listen 2009-02-23
  • 打赏
  • 举报
回复
兄弟们,非常感谢你们给我贴了这么多的代码,
不过这些代码在网上都能找到,可是解决不了问题,
你们给的代码都是在实现联动,并没有实现数据的绑定

我查了很多资料,发现,用这种方法,写DB的时候,是取不出数据
takako_mu 2009-02-04
  • 打赏
  • 举报
回复

/*===動態連接=============================================================================================*/
[WebMethod(Description = "動態三級聯動—Get國家", EnableSession = true)]
public CascadingDropDownNameValue[] GetCountriesFromDB(string knownCategoryValues, string category)
{
List<CascadingDropDownNameValue> countryList = new List<CascadingDropDownNameValue>();
AjaxCascadingDropDown myAjaxCascadingDropDown = new AjaxCascadingDropDown();
DataSet ds = myAjaxCascadingDropDown.AjaxCascadingDropDownDS("0");
foreach(DataRow row in ds.Tables[0].Rows)
{
countryList.Add(new CascadingDropDownNameValue(row["text"].ToString(), row["value"].ToString()));
}
return countryList.ToArray();
}

[WebMethod(Description = "動態三級聯動—Get省份", EnableSession = true)]
public CascadingDropDownNameValue[] GetProvinceFromDB(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
List<CascadingDropDownNameValue> countryList = new List<CascadingDropDownNameValue>();
AjaxCascadingDropDown myAjaxCascadingDropDown = new AjaxCascadingDropDown();
DataSet ds = myAjaxCascadingDropDown.AjaxCascadingDropDownDS(kv["Country"]);
foreach (DataRow row in ds.Tables[0].Rows)
{
countryList.Add(new CascadingDropDownNameValue(row["text"].ToString(), row["value"].ToString()));
}
return countryList.ToArray();
}

[WebMethod(Description = "動態三級聯動—GetCity", EnableSession = true)]
public CascadingDropDownNameValue[] GetCitiesFromDB(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
List<CascadingDropDownNameValue> countryList = new List<CascadingDropDownNameValue>();
AjaxCascadingDropDown myAjaxCascadingDropDown = new AjaxCascadingDropDown();
DataSet ds = myAjaxCascadingDropDown.AjaxCascadingDropDownDS(kv["Province"]);
foreach (DataRow row in ds.Tables[0].Rows)
{
countryList.Add(new CascadingDropDownNameValue(row["text"].ToString(), row["value"].ToString()));
}
return countryList.ToArray();
}
}
takako_mu 2009-02-04
  • 打赏
  • 举报
回复

using System;
using System.Collections;
using System.Collections.Specialized;//for StringDictionary類
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using AjaxControlToolkit;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.Collections.Generic;//for List類

/// <summary>
/// N級聯動 的摘要描述
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務,請取消註解下一行。
[System.Web.Script.Services.ScriptService]
public class N級聯動 : System.Web.Services.WebService {

public N級聯動()
{

//如果使用設計的元件,請取消註解下行程式碼
//InitializeComponent();
}

[WebMethod]
public string HelloWorld() {
return "Hello World";
}


[WebMethod(Description = "靜態四級聯動—Get國家", EnableSession = true)]
public CascadingDropDownNameValue[] GetCountries(string knownCategoryValues, string category)
{
List<CascadingDropDownNameValue> countryList = new List<CascadingDropDownNameValue>();

//靜態添加,你也可以動態添加。
countryList.Add(new CascadingDropDownNameValue("中国", "china"));
countryList.Add(new CascadingDropDownNameValue("其他", "other"));

return countryList.ToArray();
}

/// <summary>
/// param knownCategoryValues:DropdownList的Text
/// param category:DropdownList的Value
/// 那么為什么要兩個參數呢,不是一個參數就能確定了嗎?
/// StringDictionary類:将键和值强类型化为字符串而不是对象来实现哈希表,其實我也不明白
/// </summary>
/// <param name="knownCategoryValues"></param>
/// <param name="category"></param>
/// <returns></returns>

[WebMethod(Description = "靜態四級聯動—Get省份", EnableSession = true)]
public CascadingDropDownNameValue[] GetProvincesForCountry(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);

if (kv["Country"] == "other")
{
List<CascadingDropDownNameValue> provinceList = new List<CascadingDropDownNameValue>();
provinceList.Add(new CascadingDropDownNameValue("紐約", "newyork"));
provinceList.Add(new CascadingDropDownNameValue("巴黎", "bali"));
provinceList.Add(new CascadingDropDownNameValue("加拿大", "Canada"));
return provinceList.ToArray();
}
else if (kv["Country"] == "china")
{
List<CascadingDropDownNameValue> provinceList = new List<CascadingDropDownNameValue>();
provinceList.Add(new CascadingDropDownNameValue("日本省", "japan"));
provinceList.Add(new CascadingDropDownNameValue("辽宁省", "liaoning"));
provinceList.Add(new CascadingDropDownNameValue("江蘇省", "jiangsu"));
provinceList.Add(new CascadingDropDownNameValue("上海", "shanghai"));
return provinceList.ToArray();
}
else
{
return null;
}
}

[WebMethod(Description = "靜態四級聯動—Get城市", EnableSession = true)]
public CascadingDropDownNameValue[] GetCitiesForProvince(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
if (kv["Province"] == "japan")
{
List<CascadingDropDownNameValue> cityList = new List<CascadingDropDownNameValue>();
cityList.Add(new CascadingDropDownNameValue("東京", "tokyo"));
cityList.Add(new CascadingDropDownNameValue("大阪", "daban"));
return cityList.ToArray();
}
else if (kv["Province"] == "liaoning")
{
List<CascadingDropDownNameValue> cityList = new List<CascadingDropDownNameValue>();
cityList.Add(new CascadingDropDownNameValue("沈阳", "shenyang"));
cityList.Add(new CascadingDropDownNameValue("大连", "dalian"));
return cityList.ToArray();
}
else if (kv["Province"] == "jiangsu")
{
List<CascadingDropDownNameValue> cityList = new List<CascadingDropDownNameValue>();
cityList.Add(new CascadingDropDownNameValue("無錫", "wuxi"));
cityList.Add(new CascadingDropDownNameValue("東臺", "dongtai"));
return cityList.ToArray();
}
else if (kv["Province"] == "shanghai")
{
List<CascadingDropDownNameValue> cityList = new List<CascadingDropDownNameValue>();
cityList.Add(new CascadingDropDownNameValue("上海", "shanghai"));
return cityList.ToArray();
}
else
{
return null;
}
}

[WebMethod(Description = "靜態四級聯動—GetSchool", EnableSession = true)]
public CascadingDropDownNameValue[] GetSchoolForCity(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
if (kv["City"] == "wuxi")
{
List<CascadingDropDownNameValue> schoolList = new List<CascadingDropDownNameValue>();
schoolList.Add(new CascadingDropDownNameValue("江南大學", "jiangnandaxue"));
schoolList.Add(new CascadingDropDownNameValue("太湖學院", "taihuxueyuan"));
return schoolList.ToArray();
}
else if (kv["City"] == "dongtai")
{
List<CascadingDropDownNameValue> schoolList = new List<CascadingDropDownNameValue>();
schoolList.Add(new CascadingDropDownNameValue("東臺中學", "dongtaizhongxue"));
schoolList.Add(new CascadingDropDownNameValue("第三中學", "disanzhongxue"));
return schoolList.ToArray();
}
else
{
return null;
}
}
takako_mu 2009-02-04
  • 打赏
  • 举报
回复

using System;

public partial class 各種小例子_N級聯動_N級聯動 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void ddlSchool_SelectedIndexChanged(object sender, EventArgs e)
{
string country = ddlCountry.SelectedItem.Text;
string province = ddlProvince.SelectedItem.Text;
string city = ddlCity.SelectedItem.Text;
string school = ddlSchool.SelectedItem.Text;
Label1.Text = string.Format("You have chosen {0},{1},{2},{3}", country, province, city, school);
}
}
takako_mu 2009-02-04
  • 打赏
  • 举报
回复
貼上你的代碼。
另貼一個我自己用CascadingDropDown做的靜態四級聯動,動態三級聯動。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="N級聯動.aspx.cs" Inherits="各種小例子_N級聯動_N級聯動" EnableEventValidation="false" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<!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">

function pageLoad() {
}

</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
</div>
<div>
<asp:DropDownList ID="ddlCountry" runat="server"></asp:DropDownList>
<asp:DropDownList ID="ddlProvince" runat="server"></asp:DropDownList>
<asp:DropDownList ID="ddlCity" runat="server"></asp:DropDownList>
<asp:DropDownList ID="ddlSchool" runat="server"
onselectedindexchanged="ddlSchool_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
</div>
<div>
<cc1:CascadingDropDown ID="ccdCountry" runat="server"
TargetControlID="ddlCountry"
Category="Country"
PromptText="-請選擇國家-"
LoadingText="國家加載中……"
ServicePath="N級聯動.asmx"
ServiceMethod="GetCountries"></cc1:CascadingDropDown>
<cc1:CascadingDropDown ID="ccdProvince" runat="server"
TargetControlID="ddlProvince"
Category="Province"
PromptText="-請選擇省份-"
LoadingText="省份加載中……"
ServicePath="N級聯動.asmx"
ServiceMethod="GetProvincesForCountry"
ParentControlID="ddlCountry"></cc1:CascadingDropDown>
<cc1:CascadingDropDown ID="ccdCity" runat="server"
TargetControlID="ddlCity"
Category="City"
PromptText="-請選擇城市-"
LoadingText="城市加載中……"
ServicePath="N級聯動.asmx"
ServiceMethod="GetCitiesForProvince"
ParentControlID="ddlProvince"></cc1:CascadingDropDown>
<cc1:CascadingDropDown ID="ccdSchool" runat="server"
TargetControlID="ddlSchool"
Category="School"
PromptText="-請選擇學校-"
LoadingText="學校加載中……"
ServicePath="N級聯動.asmx"
ServiceMethod="GetSchoolForCity"
ParentControlID="ddlCity"></cc1:CascadingDropDown>
</div>

<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" ></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddlSchool" EventName="SelectedIndexChanged" ></asp:AsyncPostBackTrigger>
</Triggers>
</asp:UpdatePanel>

<div>
<asp:DropDownList ID="ddlCountryFromDB" runat="server"></asp:DropDownList>
<asp:DropDownList ID="ddlProvinceFromDB" runat="server"></asp:DropDownList>
<asp:DropDownList ID="ddlCityFromDB" runat="server"></asp:DropDownList>
</div>
<div>
<cc1:CascadingDropDown ID="ccdCountryFromDB" runat="server"
TargetControlID="ddlCountryFromDB"
Category="Country"
PromptText="-請選擇國家-"
LoadingText="國家加載中……"
ServicePath="N級聯動.asmx"
ServiceMethod="GetCountriesFromDB"></cc1:CascadingDropDown>
<cc1:CascadingDropDown ID="ccdProvinceFromDB" runat="server"
TargetControlID="ddlProvinceFromDB"
Category="Province"
PromptText="-請選擇省份-"
LoadingText="省份加載中……"
ServicePath="N級聯動.asmx"
ServiceMethod="GetProvinceFromDB"
ParentControlID="ddlCountryFromDB"></cc1:CascadingDropDown>
<cc1:CascadingDropDown ID="ccdCityFromDB" runat="server"
TargetControlID="ddlCityFromDB"
Category="City"
PromptText="-請選擇城市-"
LoadingText="城市加載中……"
ServicePath="N級聯動.asmx"
ServiceMethod="GetCitiesFromDB"
ParentControlID="ddlProvinceFromDB"></cc1:CascadingDropDown>
</div>

</form>
</body>
</html>
takako_mu 2009-02-04
  • 打赏
  • 举报
回复
貼代碼
mrhu7002 2009-02-04
  • 打赏
  • 举报
回复
http://51aspx.com/CV/myAjaxDropdownlist/
这个也可以
mrhu7002 2009-02-04
  • 打赏
  • 举报
回复
phper2008 2009-02-04
  • 打赏
  • 举报
回复
ddl就是select,直接ajax就可以搞定了!
HDNGO 2009-02-04
  • 打赏
  • 举报
回复
一直都是用ajaxpro返回实现的。。。貌似没做这么复杂。。。
阿云ivan 2009-02-04
  • 打赏
  • 举报
回复
帮顶~
wanghao3616 2009-02-04
  • 打赏
  • 举报
回复
不太清楚 贴出代码

62,041

社区成员

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

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

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

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