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