根据另一个下拉列表填充下拉列表

可能重复:
根据另一个选择填充一个下拉列表

我的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