为什么使用autopostback的asp.net下拉列表不会保留我选择的值

时间:2012-10-05 06:31:12

标签: asp.net

根据ASP.NET Response.Redirect(Request.RawUrl) doesn't work的建议,我确实在下拉列表中放了autopostback = true来重新加载我的页面。

但重新加载后,它还会将所选项目重置为第一项。

如何在重新加载页面之前保留以前的值呢?我以为autopostback会做那个工作吗?

5 个答案:

答案 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)

  1. 确保Enable.ViewState属性设置为true。

  2. 正如cptSup所建议的那样......确保您没有使用IsPostback检查

  3. 页面上的填充/绑定下拉菜单

答案 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”