我要实现在Default.aspx中加载一个登陆的用户控件 login.ascx ,密码正确后显示欢迎的消息 
  代码如下 (简化):login.ascx 中 protected void Page_Load(object sender, EventArgs e)
    {    }
 protected void Button1_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text == "1" && TextBox2.Text == "2")
        {
            Button1.Text = "登陆成功";
        }
        else
            Button1.Text = "xxxxx";
    }
在Default.aspx中 有个TD1 的HTML转化的服务器控件(跟placeholder相似)
代码如下 
  protected void Page_Load(object sender, EventArgs e)
    {        if (!Page.IsPostBack)
        {
            TD1.Controls.Add((Control)Page.LoadControl("~/Controls/Login.ascx"));
      
        }
       
    }然后在页面在第一次运行的时候加载了 login.ascx 这个控件,在里面输入1 和2 
点击按牛后login.ascx 就不见了,我上午实现还是好好的 (就是按钮显示"登陆成功"),其实我只要刷新页面(在页面再放个空事件按钮),那个login.ascx就不会加载了,但我是说明!Page.IsPostBack 第二次就不加载了, 意思是 login.ascx已经加载到TD1的ViewState了,但还是空白,什么也没有,自认为页面周期还学的可以,现在傻了,我理解错在哪了 ??  怪 我上午还运行的好好的  
  

解决方案 »

  1.   

    protected void Page_Load(object sender, EventArgs e)
        {        //if (!Page.IsPostBack)
            //{
                TD1.Controls.Add((Control)Page.LoadControl("~/Controls/Login.ascx"));
                //login.ascx已经加载到TD1的ViewState了? 没有!动态控件不存进ViewState
            //}
           
        }
      

  2.   

    恩,是的 
       ViewState 不加载 用户控件
    我有点犯糊涂了
      

  3.   

    protected void Page_Load(object sender, EventArgs e)
        {
                TD1.Controls.Add((Control)Page.LoadControl("~/Controls/Login.ascx"));
             
        }
    这样肯定是不对的, 在DEFAULT页面每次加载都要重新LOAD 用户控件,那样总是显示未登陆的状态
      

  4.   

    把TD1这个控件的ViewState属性钩上
      

  5.   

    Sorry,好象叫AbleViewState还是叫什么ViewState的个属性吧,我想应该有这个,设成True试试看
      

  6.   

    还是不行啊  一点按纽用户控件就不见了   ,点DEFUALT页面的上的BUTTON 也不见
       好象没加载
      

  7.   

    好奇怪 ,我声明了 !ispostback 在用BUTTON 刷新还是显示不出来  
      

  8.   

    protected void Page_Load(object sender, EventArgs e)
        {
                TD1.Controls.Add((Control)Page.LoadControl("~/Controls/Login.ascx"));
        }=============楼主有没有试一下呢? 我这里试过了,就是你要的效果
      

  9.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    TD1.Controls.Add(new TextBox());}
    ================楼主再试一下上面这个,看看在TextBox里面输入的值能不能维持~~
      

  10.   

    汗~~~~~!!!一个 ~~
       Eddie005(♂) №.零零伍 (♂) 
    你说的是对的~~
    我可是一开始就把你那种方案排除了,我觉得它加载的是个全新的login.ascx (有2个为空文本框),但结果~~~~怎么是那样 
       难道是在login.ascx 后台运行后又重新加载运行后的 ascx ,有点不懂  ~~赐教 ~
     归根到底我的毛病在哪??
      

  11.   

    if (!Page.IsPostBack)
           {
                TD1.Controls.Add((Control)Page.LoadControl("~/Controls/Login.ascx"));
                     }
    为什么刷新后没有显示 ,与我初衷大向径庭 ,我昏死了,高人指点下
      

  12.   

    我有个问题,用户控件有ViewState属性吗?
      

  13.   

    Eddie005(♂) №.零零伍 (♂) 类的高人  指点下呀  谢谢 ,一般我会自学的,不过这个我是实在想不通了
      

  14.   

    有EnableViewState  不过如上面所说  不储存用户控件
      

  15.   

    呵呵~ 是的,这是个有趣的现象,关于这一点,我暂时没有更多的原理性的东西可以发表(怕说得不准确误导了别人~),只能有一个词来形容:“冒名顶替”Page.LoadControl加载了一个全新的对象这没错,ViewState不能保留控件本身也没错,但是它可以保留控件的属性,于是,只要我们postback后所创建的新控件与前一次创建的控件具有相同的ID,便可以“窃取”它保留在ViewState中的属性至于为什么,等楼主看到什么相关的资料可以告诉我一声,谢谢~