为什么每次调用时全局字符串都变空?

时间:2015-08-07 05:35:17

标签: c# asp.net

看看这段代码。

 Label lb=new Label();
 string prev="val";
 protected void Button3_Click(object sender, EventArgs e)
 {
    prev = "temp";
    lbl.ID =prev;
    lbl.Text =prev;
    Panel1.Controls.Add(lbl);
 }

我在 button3 事件开始时有突破点。每次触发按钮事件时,我都会看到prev中的值再次变为'val'。是不是必须'temp'

3 个答案:

答案 0 :(得分:3)

因为在ASP.NET服务器端,在每次调用时都会创建页面类的新对象。如果您想保持通话之间的价值,您可以根据需要进行其中一项

  1. 创建变量static:我不推荐这种方法,因为当应用程序重新启动时,最后一个值将会丢失,但在其他2个选项中,有一些解决方案可以保持值超过应用程序重新启动。
  2. 使用Session存储它:如果每个用户需要不同的值,请使用此选项
  3. 使用Application存储它:如果所有用户都需要一个值,请使用此
  4. 注意:由于并发问题,不要忘记在变更时锁定变量。

答案 1 :(得分:2)

每次页面Post回发Button Click事件时,您的变量将在asp.net中再次初始化。 为避免这种情况,您可以在其中一种状态管理技术中保存变量的值。 例如:会话

Session["prev"]="val";

在按钮单击中,您可以使用

设置此值
Session["prev"]="temp";

调用此值可以使用

string variable=Convert.ToString(Session["prev"]);

希望这会有所帮助。

答案 2 :(得分:1)

  1. 声明' prev'某些全球类中的变量。
  2. 声明它是静态的
  3. 为整个应用程序使用一个类实例
  4. 在会话中存储
  5. 存储在应用程序中