private string a;
private void Page_Load(object sender, System.EventArgs e)
{
a = "yxz";
} private void Button1_Click(object sender, System.EventArgs e)
{
Response.Write(a);
} private void Button2_Click(object sender, System.EventArgs e)
{
a = "wcf";
Response.Write(a);
}
为什么在Button1_click里总写出来“yxz”呢 不管点多少次Button2_Click

解决方案 »

  1.   

    http协议是无状态的。
    每次按按钮之后,服务器都产生一个新的类。
      

  2.   

    哪怎么解释private static string a;这样的话,在button1里写出来的就是"wcf"
      

  3.   

    程序没错 我实验拉
    Button2_Click 就输出"wcf" 跟楼主的不一样呀
      

  4.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)a = "yxz";
    }
      

  5.   

    在page_load()裏添加一個
    if(!IsPostback)
    {
       a = "yxz";}
    因爲按鈕事件后先刷新頁面,調用page_load()函數的
    你可以在page_load()裏設置一個斷點,單步跟蹤即可知道原理
    上面的IsPostback可能拼寫有誤,你打個this.后找一下吧
      

  6.   

    private static string a;
      

  7.   

    中文就是难懂不管点多少次Button2_Click
    为什么在Button1_click里总写出来“yxz”呢
      

  8.   

    if(!IsPostBack)a = "yxz";不灵
      

  9.   

    五个裤衩表示我以前只做win的
      

  10.   

    if(!IsPostBack)不要这个意思。。我就想知道,为什么web的怎么不和win的一样。
      

  11.   

    改成这样 算拉
    private string a;
    private void Page_Load(object sender, System.EventArgs e)
    {

    } private void Button1_Click(object sender, System.EventArgs e)
    {
                                a = "yxz";
    Response.Write(a);
    } private void Button2_Click(object sender, System.EventArgs e)
    {
    a = "wcf";
    Response.Write(a);
    }
      

  12.   

    page_load() 是每个服务器端事件postback 后都会触发的
      

  13.   

    private void InitializeComponent()
    {    
                this.Button1.Click += new System.EventHandler(this.Button1_Click);
                this.Button2.Click += new System.EventHandler(this.Button2_Click);
                this.Load += new System.EventHandler(this.Page_Load);}
    看看上面的,是不是没有下面的语句
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Button2.Click += new System.EventHandler(this.Button2_Click);
    没有的话加上去,有的话,可能就是别的问题.
      

  14.   

    private string a;
    private void Button1_Click(object sender, System.EventArgs e)
    {
    Response.Write(a);
    } private void Button2_Click(object sender, System.EventArgs e)
    {
    a = "wcf";
    Response.Write(a);
    }
    点完button2_click...,在点button1_click1为什么不写"wcf"而写出来空
      

  15.   

    你点击button2,然后点击button1出来的当然还是"yxz",因为点击button1的时候,页面要回发到服务器,首先执行的是page_load事件,然后才是button1的click事件!所以a的值就又变成"yxz"了.不知道这样说明白不?
      

  16.   

    这个全局变量已经被重置了!
    这个跟WIN编程不一样。
    实在要用的话放SESSION里啊。
      

  17.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)a = "yxz";
    }
      

  18.   

    上面的都不行
    如果把a = ... 
    放在 page_load里 ,
    因为每次button_click 会传给服务器都会先执行page_load当然是yxz
    放在
    (!IsPostBack) 中由于b/s的无状态问题会是 null记录在viewstate里,或者直接用viewstate
      

  19.   

    你要写到ispostback里,不写进去的话,再次加载页面,服务器就会判断是否ispostback,LZ应该细致的理解一下页面生存期的原理
      

  20.   

    其实就是WEB他没有状态吧
    你点一下按钮他就刷新一次,就会执行一次Page_Load(),不知我讲的对不对
      

  21.   

    我觉得搂主有点烦了,建议搂住把page的生存周期好好理解一下,我这儿简单说一下。
    在每一次客户端到服务器端的请求中,服务器端的工作如下:1)为page创建一个类实例,
    2) page_init();//初始化页面控件
    .....//还有一些其它事件处理方法,一共大约十几个
    n) page_load();//加载页面
    .......//
    n+n) button_click();//单击按钮的事件处理方法
    .....
    n+n+n) 删除类实例
      

  22.   

    使用 Session
    private string a;
    private void Page_Load(object sender, System.EventArgs e)
            if(!IsPostback)
            {
               a = "yxz";        }

    private void Button1_Click(object sender, System.EventArgs e)
    {
                               a = Session["a"];
    Response.Write(a);
                               Session["a"] = a;
    } private void Button2_Click(object sender, System.EventArgs e)
    {
    a = "wcf";
    Response.Write(a);
                               Session["a"] = a;
    }
      

  23.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    a = "yxz";
    }
    }
      

  24.   

    楼上各位大虾已经解释得差不多了,coder0621 说得很对,建议搂住把page的生存周期好好理解一下,每次postback,总是先执行page_load(),然后再执行button_click(),所以在page_load中这样写if(!IsPostBack)
    {
    a = "yxz";
    }当单击按钮postback后,就不会给a 赋值,Button1_click就不会打出“yxz”了。但即使上次点了Button2,点Button1_click也不会打出“wcf”的。除非把a的值存起来。