到这篇文章的日期,我已经花了10多种染料,但无法解决我的问题:(
我有一个db表位置它有3个文件LocID,locName,locParent。
我想创建一个DropDownList
,其中包含所有主要位置,例如国家/地区。
然后当用户选择一个位置(例如一个国家)
该国家/地区的所有城市都会在动态创建的下拉列表中重新加载。
此页面必须包含无限的子类别。
该解决方案也必须位于Ajax
和C#
。
答案 0 :(得分:0)
您需要将AjaxExtensions(附带.net 3.5)添加到.net 2.0 apps http://www.asp.net/ajax
这将需要页面上的ToolKitScriptManager
在页面上放置三个下拉列表。将它们命名为ddlCountry,ddlCity和ddlMainLocation。
可选择将两个“子”下拉列表放在设置为不可见的面板中。
在页面加载时,使用SqlDataBase Reader
从数据库中提取位置信息使用阅读器,遍历记录并将项目添加到下拉列表
E.g。
// Create a command object and set it to run a stored procedure that gets the countries from the database
SqlDataReader rdr = cmd.ExecuteQuery();
try
{
ddlCountries.items.clear();
While (rdr.read())
{
// Text to display, Common Data Item
ddlCountries.items.add(new ListItem(rdr("CountryName").toString(),rdr("CountryCode").ToString());
}
}
catch()
{
// do something with your error
}
在ddlCountries下拉列表中添加以下属性:
(1)将对要更改的索引执行命令 (2)当项目被更改时将触发回发
然后,ddlCountries_SelectedIndexChanged事件方法将在数据库中查询属于所选国家/地区代码的相关城市(或使值成为包含城市的表的外键)
现在测试代码以确保回发导致城市列表填充数据。此时,它是一个普通的ASP.Net页面,带有回发。要在标记中完成部分回发,请在下拉列表周围添加更新面板。它看起来如下:
<asp:UpdatePanel runat="server" id="upnlDropdowns" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddlCountries" EventName="OnSelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<!--... Your Drop downs and any code to be Ajaxified .../-->
</ContentTemplate>
</asp:UpdatePanel>
再次测试并确保一切仍然有效。如果是这样,那么您可以添加第三个下拉列表。这次它将由城市下拉列表中选定的索引更改事件填充。
一旦完成所有工作,您可以通过添加updateprogress来添加令人惊叹的因素,该updateprogress扩展了updatePanel以显示工作图像。
祝你好运!