本人没有做过C#,遇到一个小问题,请大虾指教。
public partial class WebForm1 : System.Web.UI.Page
    {
        public string name = "";        protected void Page_Load(object sender, EventArgs e)
        {        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            name = "ggg";
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            Label1.Text = name;
        }
    }
这个name在button2点击时为空,怎么回事?

解决方案 »

  1.   

    button1 和 button2 都设置为 autopostback
      

  2.   

    public static string name="";
      

  3.   

     public string name = "";  protected void Page_Load(object sender, EventArgs e)
      {  }
      protected void Button1_Click(object sender, EventArgs e)
      {
      name = "ggg";
      }
      protected void Button2_Click(object sender, EventArgs e)
      {
      Label1.Text = name;
      }
    楼主你看,你在点击2时,你的1没有执行又,name本来就是“”
    所以肯定是“”而且就算你点了1,执行完后页面回传
    像这种情况可以这样使用 
      protected void Page_Load(object sender, EventArgs e)
      {
      if(ViewState["name"]!=null)
      {
        Label1.Text = ViewState["name"].ToString();
      }  }
      protected void Button1_Click(object sender, EventArgs e)
      {
       string name = "ggg";
        ViewState["name"]=name;
      }
      protected void Button2_Click(object sender, EventArgs e)
      {
      if(ViewState["name"]!=null)
      {
        Label1.Text = ViewState["name"].ToString();
      }
      }
      

  4.   


    asp.net每一次处理一个页面请求,都是创建一个新的页面对象。一个页面的生命周期只有一瞬间,当它输出html之后页面对象就销毁了。然后当用户从浏览器端点击触发事件而引起回发,asp.net系统又重建一个新的页面实例,然后自动恢复页面上各种ViewState值,这样你才能感到似乎类似Winform似地状态被持久化着。因此没有保存到ViewState中的数据,也随着页面对象的销毁而毫无意义了。下一次回发时其实就随着新的对象的创建而初始化了变量。如果你能有机会正规地学asp.net,你最好找一个能给你围绕这个机制来介绍的。
      

  5.   

    单就你的代码而言,不用修改其它部分对name变量的使用,你只需要修改一个地方,将字段修改为属性:public string name
    {
      get
      {
          object nm= ViewState["nm"];
          return nm==null? string.Empty: (string)nm;
      }
      set
      {
          ViewState["nm"]= value;
      }
    }其它地方不用做任何修改。