我需要修改3级下拉列表<select>
菜单,以便直接在页面上运行,而不是在iframe内部运行(这就是我们目前的工作方式)。
以下是此菜单的工作原理:
用户在第一个下拉列表中进行选择
第二个下拉菜单中的选项会根据第一个中选择的内容进行过滤;用户从这些选择之一中选择
根据第二个选项中选择的内容过滤第三个下拉菜单中的选项;用户从这些选择中选择一个;最后一个下拉列表提交表单并将用户重定向到另一个页面,同时传递所有三个下拉列表中的值。
现在,这是使用查询ASP.net数据库并在每次选择后重新加载的<iframe>
来完成的。
我真的需要它在不使用iframe的情况下工作。不确定最优雅的方法是......
答案 0 :(得分:0)
如果您愿意使用ASP.NET Ajax工具包,那么他们会有cascading dropdown control来完成您的要求。另一个好处是,因为它使用Ajax,所以在下拉列表中的每次选择后都不必重新加载页面。
答案 1 :(得分:0)
我认为你甚至可能需要在DropDownList控件上使用'onSelectIndexChanged`。类似......
<asp:DropDownList id="ddl1" runat="server" OnSelectedIndexChanged="ddl1_OnSelectedIndexChanged"></asp:DropDownList>
<asp:DropDownList id="ddl2" runat="server" OnSelectedIndexChanged="ddl2_OnSelectedIndexChanged"></asp:DropDownList>
<asp:DropDownList id="ddl3" runat="server" OnSelectedIndexChanged="ddl3_OnSelectedIndexChanged"></asp:DropDownList>
Page_Load()
{
if(!IsPostBack)
{
ddl1.DataSource = getdata();
ddl1.DataBind();
}
protected void ddl1_onSelectedIndexChanged(object sender, EventArgs e)
{
ddl2.DataSource = getData(ddl1.SelectedValue);
ddl2.DataBind()
}
protected void ddl1_onSelectedIndexChanged(object sender, EventArgs e)
{
ddl3.DataSource = getData(ddl2.SelectedValue);
ddl3.DataBind()
}
protected void ddl3_onSelectedIndexChanged(object sender, EventArgs e)
{
Response.Redirect("SomePage.aspx?ddl1="+ddl1.SelectedValue+"&ddl2="+ddl2.SelectedValue+"&ddl3="+ddl3.SelectedValue, true);
}
答案 2 :(得分:0)
您可以将其中所有3个放入UpdatePanel。
我确定您的更改已经在刷新页面。 将它们放在更新面板中将仅刷新面板,从而导致部分页面更新。
这使用ajax在内部完成工作。
如果您需要,可以使用update panel example。
P.s。:Asp.net创建<select>
的方法是DropDownList
控件。我希望你已经在使用那些,如果没有将你的选择转换为下拉列表。