重定向时记住DropDownList状态

时间:2011-02-16 12:04:11

标签: asp.net drop-down-menu redirect

我有DropDownList,它有一些可供选择的选项。现在,当用户选择其中一个选项后,必须单击一个按钮,这是同一页面上的重定向:

protected void Button4_Click(object sender, EventArgs e)
{
    Response.Redirect("Graphs.aspx?Selection=" + DropDownList1.SelectedValue + "&Date1=" + TextBox1.Text + "&Date2=" + TextBox2.Text);
}

我必须使用重定向而不是回发,因为我使用flot是javascript库,当用户选择其他选项时,必须再次编写所有代码。问题是,当它重定向回来时,由于某种原因我无法记住DropDownList中的值,该值已经是用户之前选择的。我用这段代码尝试了这个:

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.QueryString["Selection"] == "TemperatureOUT")
    {
        DropDownList1.SelectedIndex = 0;
    }
    else if (Request.QueryString["Selection"] == "Dewpoint")
    {
        DropDownList1.SelectedIndex = 1;
    }
}

问题是,如果用户从DropDownList中选择Dewpoint,然后单击一个导致重定向的按钮,那么新的url应该具有:

Graphs.aspx?Selection=Dewpoint&...

但相反,它说:

 Graphs.aspx?Selection=TemperatureOUT&...

现在,如果我从Page_Load中删除该代码,它可以正常工作,但它不记得之前用户选择的内容。现在我知道必须有一些与Page_Load有关的内容。不是当页面被重定向时,调用Page_Load get,所以它应该看起来是一个Selection值并将其打印出来。所以它必须是重定向的问题,由于某种原因,它不会设置所选的值。

2 个答案:

答案 0 :(得分:1)

可能是你要求的那个

DropDownList oldvalue = (DropDownList)PreviousPage.FindControl("DropDownList1");

尝试写这样的

  protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList ddl = (DropDownList)Page.PreviousPage.FindControl("Your first page drop down id here");
        if (ddl!=null)
        {
          if(ddl.SelectedValue == "2")
            // do your coding here
        }
    }
}

答案 1 :(得分:0)

我要检查的第一件事是您使用IsPostBack来确定要添加到列表中的项目:

if (!IsPostBack)
{
    DropDownList1.Items.Add(...)
}

如果您对列表进行了更改而没有安全地确定它是否应该是GET或POST操作,则列表项将会反弹(假设您在代码中添加它们而不是标记)。当页面通过POST加载时,它会恢复控件的状态(在这种情况下是添加的项目),然后在处理加载事件之前应用任何更改(如所选项目等)。

当您进行重定向时,您将为重定向目标发出新的GET请求,该请求将呈现页面而不处理选择。通过组合IsPostBack并在GET请求上处理查询字符串,这应该足以解决您的问题。