将下拉列表选定值保存到ViewState

时间:2011-12-13 22:31:34

标签: c# .net drop-down-menu viewstate selectedindexchanged

我有一个下拉列表,当更改时会将新值保存到ViewState变量中,这样在回发后,如果先前设置了下拉列表,它将从ViewState中检索它的选定值。

当它尝试将DropDownList1_SelectedIndexChanged中的选定值存储到ViewState时,它总是插入原始值而不是更新的值。在这种情况下,ViewState始终为“R”,并且不会根据其他选定值进行更改。

有什么想法吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication11
{
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        if (ViewState["List1_Value"] != null)
        {
            DropDownList1.SelectedValue = ViewState["List1_Value"].ToString();

        }
        else
        {
            DropDownList1.SelectedValue = "R";

        }

    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        ViewState["List1_Value"] = DropDownList1.SelectedValue.ToString();

    }       

}
}

2 个答案:

答案 0 :(得分:1)

更改Page_Load方法以在不是回发后绕过下拉列表代码。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (ViewState["List1_Value"] != null)
        {
            DropDownList1.SelectedValue = ViewState["List1_Value"].ToString();
        }
        else
        {
            DropDownList1.SelectedValue = "R";
        }
    }
}

答案 1 :(得分:0)

在SelectIndexChanged事件之前触发Page_Load事件。当您更改下拉列表中的值时,ViewState的值仍为null,因此下拉列表设置为“R”?

了解以下MSDN文章讨论页面生命周期:http://msdn.microsoft.com/en-us/library/ms178472.aspx