页面范围变量Dissapear
问题描述:
假设我有以下asp.net页面:页面范围变量Dissapear
public partial class SamplePage : System.Web.UI.Page
{
private int UserID;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSearchUser_Click(object sender, EventArgs e)
{
UserID = 5;
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
Response.Write(UserID.ToString());
}
}
但用户ID始终为0。如何实现它是5始终?
答
由于Button的点击会导致回发,并且在回发期间数据总是丢失,因为HTTP协议是无状态的。因此,您必须将该用户ID存储到视图状态以保持其值...因此,我们拥有State Mangement在Asp.net中的概念。 但是可以实现像这样......
public partial class SamplePage : System.Web.UI.Page
{
int UserID;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSearchUser_Click(object sender, EventArgs e)
{
UserID=5;
ViewState["UserID"] = UserID;
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
if(ViewState["UserID"]!=null)
Response.Write(ViewState["UserID"].ToString());
}
}
答
要坚持回发之间的数据需要将其放置到当前控件的视图状态:
private int UserID
{
get
{
return this.ViewState["UserID"] as int? ?? -1; // if data is missing, default value -1 will be returned
}
set
{
this.ViewState["UserID"] = value;
}
}
不要查找ViewState中,曾多次(两次在你的代码中)。 – abatishchev 2012-07-26 09:16:17
为什么?背后的原因......? – 2012-07-26 09:18:07