日期:2014-05-17  浏览次数:20487 次

一个奇怪的按钮订阅的问题
遇到一个问题,虽然我解决了,不过我不知道问题的原因,请教一个大家。
简单举个例子,我页面上有2个按钮,因为不想每个按钮都写一次click事件,我就写了一个公用的方法btn_Click。

public int[,] number = new int[2,2]//这是我定义的一个全局变量

//这是我写的方法
private void btn_Click(object sender, EventArgs e)
    {
        number[0,0]++;
    }

//网页加载的时候,我把2个按钮的click事件都订阅到了btn_Click上
protected void Page_Load(object sender, EventArgs e)
    {
        this.btn_1.Click += new EventHandler(this.btn_Click);
        this.btn_2.Click += new EventHandler(this.btn_Click);

        number[0,0] = 0;//设置其初始值为0
     }

问题来了,我按btn_1和btn_2的时候,调用btn_Click的时候,值确实增加了1,但是我再点按钮,再次进入btn_Click这个方法的时候,值又自己变回了0。我定义的不是全局变量嘛?为什么会变回来。
哪部分原理我没有搞懂请大家指正一下。

我后面解决的办法是给number加了static,就行了。
------解决方案--------------------
因为Web是无状态的,每次访问页面,服务器都会重新构建界面,所以你访问不到原来的变量了


static不太好,全局共享. 你可以将值存到ViewState
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
------解决方案--------------------
因为number本来就不是什么全局变量
而是这个page类的属性,加static才是全局变量

但是webform的全局会影响到所有用户,也就是说你点击了btn_1后会影响到其他用户

你可以用两个不同的浏览器试一下

正确的做法是把number保存在session里。