下面引用 http://www.cnblogs.com/meyer/archive/2004/04/27/7846.html
在C#中,static变量表示该变量属于类,而不是类的实例。可以说是该类的所有实例共享一个static变量。asp.net的页面就是一个类,我们访问一个页面。就会在服务器上实例化一个该类的实例,来响应我们的请求。“所有实例共享一个static变量” 这就意味着,所有的客户端访问到的asp.net页面中static变量都是同一个变量。
由于我们每次访问asp.net页面都是一个全新的对象,而不是我们上一次访问的对象。所以上次页面访问时我们对页面中变量的改动都没有保留。遇到这个问题的时候,很多初学者的直觉就是将这个变量申明为static,自己在测试的时候发现还真的保留住了页面的状态。
测试代码如下:
View Code
public partial class _Default : System.Web.UI.Page
{
private static string str;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
str = "这是个static变量赋值"+DateTime.Now;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.TextBox1.Text = str;
}
}
我用火狐连续打开3个页面点击按钮显示的值都是同样的(把连接赋值到IE下值就变了)
View Code
public partial class _Default : System.Web.UI.Page
{
//private static string str;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
//str = "这是个static变量赋值"+DateTime.Now;
ViewState["Key"] = "这是个static变量赋值" + DateTime.Now;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.TextBox1.Text = ViewState["Key"].ToString();
}
}
改为ViewState正常