ViewState不记得上一页init的值

时间:2016-06-22 03:13:10

标签: c# asp.net viewstate failed-to-load-viewstate loadviewstate

我在这里做错了什么。我无法让ViewState工作:

protected void Page_Init(object sender, EventArgs e)
{
            Method1();
}

private void Method1()
{
    Element.Click += new EventHandler(Button_Click);
}
public void Button_Click(object sender, EventArgs e)
{
    if(ViewState["x"] != null) 
               // use ViewState["x"] from previous Page Init
    //do processing ...

    //in the end, store value for future use
    ViewState["x"] = myLabel.Text;
}

我正在重新加载页面,所以首先触发Page Init,我做的更改,在这些更改之前我从ViewState读取变量的先前值,然后我进行处理,然后覆盖该值以供后续使用(在我的下一页Init),之后我再次覆盖它。

问题是我的ViewState为null,它没有存储/记住我在上一页init给它的值 谢谢

2 个答案:

答案 0 :(得分:1)

您不能这样做,因为ViewState是特定于页面的,并且实际存储在呈现页面的HTML中。您需要通过POST或查询字符串传递值或将其存储在会话中,或者您可以将值缓存在您将能够在另一页上访问的asp.net缓存中。 / p>

您可以使用ViewState将数据传输到Postback上的同一页面。

设置ViewState

ViewState["FirstName"] = "SuperMan";

用于在回发时检索ViewState

string sFirstName = ViewState["FirstName"].ToString();

您可以使用Context将数据传输到另一个页面。

<强> Page1.aspx.cs

this.Context.Items["FirstName"] = "SuperMan";

<强> Page2.aspx.cs

string sFirstName = this.Context.Items["FirstName"].ToString();

您可以使用Session变量来保留几乎每个页面或特定用户的应用程序所需的公共数据。

设置Session

Session["FirstName"] = "SuperMan";

应用于您的代码:

public void Button_Click(object sender, EventArgs e)
{
    if (Session["x"] != null)
    { 
        // do processing

        // in the end, store value for future use
        Session["x"] = myLabel.Text;
    }
}

从任何页面检索Session直到会话有效:

string sFirstName = Session["FirstName"].ToString();

同样,您也可以使用Cookies,但Cookie将存储在客户端上。

答案 1 :(得分:0)

ViewState只记住其页面上的值,并且不能将值传递给另一个页面,以便使用其他会话状态,如Session变量,查询字符串等

简单使用像这样的会话变量

public void Button_Click(object sender, EventArgs e)
{
    if(Session["x"] != null) 
               // use Session["x"] from previous Page Init
    //do processing ...

    //in the end, store value for future use
    Session["x"] = myLabel.Text;
}