我在这里做错了什么。我无法让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给它的值 谢谢
答案 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;
}