0

我需要修改一个 3 级下拉<select>菜单以直接在页面上运行,而不是在 iframe 内(我们目前就是这样做的)。

此菜单的工作原理如下:

  1. 用户在第一个下拉列表中进行选择

  2. 第二个下拉列表中的选择根据第一个下拉列表中的选择进行过滤;用户从这些选项之一中进行选择

  3. 第三个下拉列表中的选择根据第二个中选择的内容进行过滤;用户从这些选项之一中进行选择;最后一个下拉列表提交表单并将用户重定向到另一个页面,同时传递来自所有三个下拉列表的值。

现在,这是使用<iframe>查询 ASP.net 数据库并在每次选择后重新加载自身来完成的。

我真的需要它在不使用 iframe 的情况下工作。不知道解决这个问题的最优雅的方法是什么......

4

3 回答 3

0

如果您愿意使用 ASP.NET Ajax Toolkit,他们有一个级联下拉控件,可以满足您的要求。另一个好处是,因为它使用 Ajax,所以不必在下拉菜单中的每个选择后重新加载页面。

于 2012-06-22T12:50:21.607 回答
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);
}
于 2012-06-22T12:51:01.710 回答
0

您可以将所有 3 个都放在 UpdatePanel 中。

我确信您的更改已经使页面刷新。将它们放在更新面板中只会使面板刷新,从而导致部分页面更新。

这使用 ajax 在内部完成这项工作。

这是一个更新面板示例,如果您想要的话。

ps:asp.net的创建方法<select>是一个DropDownList控件。我希望您已经在使用这些,如果没有将您的选择转换为下拉列表。

于 2012-06-22T12:53:27.947 回答