根据ASP.NET Response.Redirect(Request.RawUrl) doesn't work的建议,我确实在下拉列表中放了autopostback = true来重新加载我的页面。
但重新加载后,它还会将所选项目重置为第一项。
如何在重新加载页面之前保留以前的值呢?我以为autopostback会做那个工作吗?
答案 0 :(得分:9)
确保您没有在回发时重新填充下拉列表。
protected void Page_Load(object sender, EventArgs e)
{
PopulateDropDownList();
}
每次都会重置它。而是尝试:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
PopulateDropDownList();
}
}
答案 1 :(得分:5)
这是一个非常古老的问题,但我仍然想回答可能会引用此页面的其他人:
当您在下拉列表中包含非唯一字符串时,您将始终指向具有相同值的第一个项目。
例如:
Text =“xyz”Value =“0”
Text =“xyz1”Value =“0”
Text =“xyz2”Value =“0”
Text =“abc”Value =“1”
当您选择xyz或xyz1或xyz2时,在回发后,它会返回到第一个项目,其中文本为xyz。 如果保留唯一值,则不会遇到此问题。 我浪费了我的时间,终于通过这个技巧解决了问题。
答案 2 :(得分:3)
确保Enable.ViewState
属性设置为true。
正如cptSup所建议的那样......确保您没有使用IsPostback
检查
答案 3 :(得分:2)
还要确保您没有检查System.Web.UI.Page.Init方法中的DropDownList.SelectedValue。由于ASP.NET页面生命周期,在System.Web.UI.Page.Load方法之前,SelectedValue将不可用。至少这是我的经验,就在ASP.NET 4.0中。
答案 4 :(得分:1)
只是添加到GMaster9的答案,在我的情况下,我不得不把text =值。 只需使值唯一,例如1,2,3 ......没有帮助。 因此:
Text =“xyz”Value =“xyz”
Text =“xyz1”Value =“xyz1”
Text =“xyz2”Value =“xyz2”