根据另一个下拉列表填充下拉列表
可能重复:
根据另一个选择填充一个下拉列表
我的aspx页面上有3个下拉列表。 第一个是硬编码的4个值。 第二个应该以编程方式填充,例如。 如果我在第一个下拉列表中选择“Product1”,则应使用“Model1_1”,“Model1_2”等值填充第二个下拉列表。 如果我选择“Product2”,则第二个下拉列表将填充“Model2_1”,“Model2_2”)。
你能给我一些帮助吗?
1在第一个DropDownList1上设置AutoPostBack="true"
并添加OnSelectIndexChanged="YourDelegate"
。
2在发布数据时,在委托中,将第二个DropDownList2与前缀SelectedValue绑定
protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e) { var value = DropDownList1.SelectedValue; if(value == "Product1") { .... } else if(value == "Product2") { .... } }
我可以为这个问题命名2个解决方案。
第一个涉及使用AJAX Toolkit for ASP.NET页面中的Cascading Drop Down。 你有这里的参考和一个例子: http : //www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/CascadingDropDown/CascadingDropDown.aspx它有点cleaner
,它不会导致回发,但你必须使用该工具包。 但是学会使用它很好,因为它为其他人提供了很好的设施。
第二个涉及为DropDownList添加OnSelectedIndexChange事件的处理程序。 因此,当用户从第一个下拉列表中选择一个值时,服务器端将捕获该事件并使用必要的值填充第二个DropDown。 由于这需要服务器端操作,因此在进行选择之后重新加载页面可能相当烦人。 客户端应如下所示:
服务器端的位置:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { DropDownList2.Items.Clear(); DropDownList2.Items.Add("text"); .... }
您可以通过以下方式填充第二个drp(DropDownList):将第一个drp连接到表,该表调用此查询:(在SQLDataSource1中)
SELECT [id], [name] FROM Products
在第二个drp你应该调用(在SQLDataSource2中)
SELECT [id], [name] FROM Models WHERE ProductID=@Product_id
在SQLDataSource2
select command
Property add Product_id
参数值必须是drp1.SelectedValue
注意:不要忘记为drp1 Enable AutoPostBack