0

我在这里做错了什么。我无法让 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 读取变量的先前值,然后进行处理,然后覆盖该值以供后续使用(在我的下一个 Page Init ),之后我再次覆盖它。

问题是我的 ViewState 是 null ,它不存储/记住我在上一页初始化时给它的值 谢谢

4

2 回答 2

1

您不能按照ViewState页面特定的方式执行此操作,并且实际上存储在呈现页面的 HTML 中。您需要通过 aPOST或在查询字符串中传递值或将其存储在会话中,或者您可以将值缓存在 asp.net 缓存中,您将能够在其他页面上访问该缓存。

您可以使用ViewStatePostback 将数据传输到同一页面。

对于设置ViewState

ViewState["FirstName"] = "SuperMan";

对于回发检索ViewState

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

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

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 将存储在客户端上。

于 2016-06-22T03:15:20.930 回答
0

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

像这样简单使用会话变量

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;
}
于 2016-06-22T03:20:18.497 回答