本帖最后由 jekeywood 于 2010-12-20 00:05:48 编辑

解决方案 »

  1.   

    生命周期的问题,整个_Default(当然包括类成员UserName)在完成一次请求后就销毁了。
    要保持UserName的话,可以放在ViewState或者Session里。
    i=999 是因为每次_Default都初始化成999了。(因为这一句初始化:private int i = 999;)private User u = null;private void BindUser()
    {
        var u = new User();
        u.UserID = 1;
        u.UserName = "name";
        ViewState["User"] = u;
        Response.Write("i=" + i.ToString() + " ");
        Response.Write(u.UserID + ":" + u.UserName);
    }protected void Button1_Click(object sender, EventArgs e)
    {
        var u = ViewState["User"] as User;
        Response.Write( "i=" + i.ToString() + " ");
        Response.Write(u.UserID + ":" + u.UserName);
    }
      

  2.   

       protected void Button1_Click(object sender, EventArgs e)
            {
                Response.Write( "i=" + i.ToString() + " ");
                Response.Write(u.UserID + ":" + u.UserName);
            }
    每次请求该页面 u 这个对象都是重新实例化的,当你执行Button1_Click 这个事件的时候,上次实例化并设置属性的对象不可能传到这次请求的页面中,页面只要一刷新原来的内容就全部不存在了,而是重新加载,重新实例化对象,重新设置属性值。
      

  3.   

    补充,没写完点提交了
    要想解决,一楼的办法很好,保存到ViewState 或 session 
      

  4.   

    或者楼主把需要一次赋值,长期保存的变量,前面加上static也可以达到效果。
      

  5.   

     u = new User(); 放到 if (!IsPostBack)上面
      

  6.   

    另外,什么  Response.Write 之类的写法,如果你真的在写asp.net程序之前学过html/javascript应该看看浏览器所获得的html代码,它根本不是一个完整的html,只不过ie的容错性比其它浏览器稍微好一点所以你似乎看到了所显示的文字。但是等你不是刚学1个月,而是几个月之后,许多的内容、样式,以及其它浏览器上的表现就很差了。因为你输出的根本不是一个真正的html。
      

  7.   

    /*页面的一个按钮,点击执行了一个回传事件后,整型的i的值999得到了保留。
    但是为什么User对象u却仍为null呢?我在BindUser()方法中已经对其赋值了啊?*/
            protected void Button1_Click(object sender, EventArgs e)
            {
                //Response.Write( "i=" + i.ToString() + " ");
                //Response.Write(u.UserID + ":" + u.UserName);             BindUser();
            }
    这样就可以了。