C# 将dropdownlist选定值保存到ViewState

C# 将dropdownlist选定值保存到ViewState,c#,.net,drop-down-menu,viewstate,selectedindexchanged,C#,.net,Drop Down Menu,Viewstate,Selectedindexchanged,我有一个dropdownlist,当更改时,它会将新值保存到ViewState变量中,这样在回发之后,dropdownlist将从ViewState中检索它所选的值(如果以前设置过) 当它尝试将选定值存储在DropDownList1\u SelectedIndex中并更改为ViewState时,它总是插入原始值,而不是更新后的值。在这种情况下,ViewState始终为“R”,并且从不根据其他选定值进行更改 有什么想法吗 using System; using System.Collections

我有一个dropdownlist,当更改时,它会将新值保存到ViewState变量中,这样在回发之后,dropdownlist将从ViewState中检索它所选的值(如果以前设置过)

当它尝试将选定值存储在DropDownList1\u SelectedIndex中并更改为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();

    }       

}
}

页面加载事件在SelectedIndexChanged事件之前触发。更改下拉列表中的值时,ViewState的值仍然为空,因此下拉列表设置为“R”


下面是一篇讨论页面生命周期的MSDN文章:

页面加载事件在SelectedIndexChanged事件之前触发。更改下拉列表中的值时,ViewState的值仍然为空,因此下拉列表设置为“R”


请看下面一篇讨论页面生命周期的MSDN文章:

当不是回发时,更改页面加载方法以绕过下拉列表代码

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";
        }
    }
}

更改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";
        }
    }
}

是否确定问题在于保存到viewstate?它不总是R,因为if语句返回FALSE吗?if语句在加载第一页时返回FALSE。然后,当选定值发生更改时,ViewState会保存列表值,但只保存原始的“R”,而不会保存为触发SelectedIndexChanged而选择的其他值。第二次,if语句为true,列表从ViewState中检索其值,令人烦恼的是,它仍然是“R”,因为selectedIndexChanged不会将新的选定值保存到ViewState。您确定保存到ViewState会有问题吗?它不总是R,因为if语句返回FALSE吗?if语句在加载第一页时返回FALSE。然后,当选定值发生更改时,ViewState会保存列表值,但只保存原始的“R”,而不会保存为触发SelectedIndexChanged而选择的其他值。第二轮,if语句为true,列表从ViewState中检索其值,令人烦恼的是,它仍然是“R”,因为selectedIndexChanged不会将新的选定值保存到ViewState.ok,但第二轮ViewState的值为“R”,这意味着ViewState是在重新加载页面之前保存的。只需要弄清楚如何在ViewState中获得不同的值?好的,但是ViewState的第二次循环的值为“R”,这意味着ViewState是在页面重新加载之前保存的。只需要找出如何在ViewState中获得不同的值?