我有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值并将其打印出来。所以它必须是重定向的问题,由于某种原因,它不会设置所选的值。
答案 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请求上处理查询字符串,这应该足以解决您的问题。