用户控件的Page_Load比它所在窗体的Page_Load先运行就是这样

解决方案 »

  1.   

    Response.Write("select uname,uptime,content from " + tname + " where " + kk + "=" + vv + " order by uptime desc");
    Response.End();你可以把这几句话搬到PreRender()里
      

  2.   

    晕了,,
     protected void Page_PreRender(object sender, EventArgs e)
        {
            Response.Write("select uname,uptime,content from " + tname + " where " + kk + "=" + vv + " order by uptime desc");
            Response.End();
        }
    放到这里还是取不到值。。
      

  3.   

    直接在html里,引用此控件处写
    <uc1:WebUserControl ID="WebUserControl1" runat="server" _kk="aa" _vv="bb" />
    就好了
      

  4.   

    public string tname
        {
            set
            {
                _tname = value;----改成value=_tname就可以了
            }
            get
            {
                return _tname;
            }
        }
      

  5.   

    protected webs_reply c1 = new webs_reply();错误!不要赋值声明一下protected webs_reply c1;
    即可
      

  6.   

    还要确保窗体的html代码里webs_reply控件的id="c1"
      

  7.   

    在引用用户控件的页面 手动声明该控件
    protected 命名空间.命名空间.类名 用户控件的id值; 
    不用new就可以了
      

  8.   

    你的代码有几个问题:1. "protected webs_reply c1 = new webs_reply();"这个写的真的没道理!webs_reply只是用户控件的父类(你看你的ascx的生命上写着inherit呢吧),而不是用户控件本身。2. 用户控件要动态产生就应该用页面的LoadControl方法装入。例如:  webs_reply uc=(webs_reply)this.LoadControl("webs_reply.ascx");
      uc.kk="aa";3. 控件只有装入页面控件树,才可能真正找得到正确的Response对象。4. 一般来说你在动态装载的控件的load事件中处理业务逻辑会得到错误的结果。不过你这个例子恰好流程异常简单,即使写错了地方,结果也不会出错。就好像有些去上厕所如果走错了门,只要后边根本没有人进来,你也不会感到有什么不方便。当你的程序要处理状态、处理post值、业务处理等的时候,就会发现必须把业务逻辑代码放到准确的事件上。
      

  9.   

    谢谢SP1234,,你的意思是我的代码没有写到正确的事件里吗??是用户控件里还是调用页里不对??以上的方法我都试了,除了这个: _tname = value;----改成value=_tname就可以了真的没有办法了,,恳请大侠们再帮我一把,,究竟错在哪了,,有人能帮我写一个对的出来吗》》
      

  10.   

    先将用户控件webs_reply对其自身成员的输出移动到PreRender内,然后——如果:
    1-------------------------------------------------
    窗体的html代码中包含了用户控件webs_reply的引用,则:
    *在窗体的后台代码类定义中加入声明:protected webs_reply c1;
    *在Page_Load中按原样访问2-------------------------------------------------
    窗体的html代码中并不包含了用户控件webs_reply的引用,而是在窗体的后台代码中手动添加此控件,则:
    *在窗体的后台代码类定义中加入声明:protected webs_reply c1;
    *在窗体的Page_Load中为c1的属性赋值之前创建其对象:c1 = new webs_reply();
    *在赋值后,添加代码:this.Control.Add(c1);
      

  11.   

    谢谢SP1234,,你的意思是我的代码没有写到正确的事件里吗??是用户控件里还是调用页里不对??
    ——————————————————————————————————————————
    我前三条是针对的你的逻辑错误,你的程序表现就错了。如果你前三天改好,后一条恰好不用改。你的代码:   protected webs_reply c1 = new webs_reply();
        
        protected void Page_Load(object sender, EventArgs e)
        {
                c1.kk = "sid";
                c1.vv = sid;
                c1.tname = "rhb_es_reply";
              }
    }看上去你并没有研究页面的load如何会调用c1控件的load的。
      

  12.   

    xujunsweet() 正解SP1234分析的比较透彻都是牛人呀
      

  13.   

    用户  xujunsweet() 直接在html里,引用此控件处写
    <uc1:WebUserControl ID="WebUserControl1" runat="server" _kk="aa" _vv="bb" />
    就好了
    是错误的正确应该如下:直接在html里,引用此控件处写
    <uc1:WebUserControl ID="WebUserControl1" kk='aa' ,vv='bb',tname='name'   runat="server" />
    就好了在ASPX。CS页中需要给它们赋值了
      

  14.   

    更正
    在ASPX。CS页中不需要给它们赋值了
      

  15.   

    你在实例化那个自定义控件时 打ASP.看看能不能看到那个自定义控件名称 
    如果没有 在html中写<register >之类的东西 再运行一下 估计就可以了
    我做了6。7个自定义控件都好用的 
    可惜我的代码没在这 要不我给你发些
      

  16.   

    public string kk
        {
            set
            {
                ViewState["kk"] = value;
            }
            get
            {
                return ViewState["kk"].ToString();
            }
        }
      

  17.   

    在html最上面添加:
    <%@ Register TagPrefix="Tag" TagName="Title" Src="webs_reply.ascx" %>在Form中引用:
    <form id="Form1" method="post" runat="server">
    <Tag:Title id="m_TitleControl" runat="server"/>]然后在画面初期化时,对属性赋值
    m_TitleControl.KK = value
    ......
    (m_TitleControl要先声明)
      

  18.   

            
            webs_reply  c1 = (webs_reply)this.FindControl("MyControl1");        c1.kk = "sid ";
            c1.vv = "sid";
            c1.tname = "rhb_es_reply "; 
      

  19.   

    觉得主要问题是 protected   webs_reply   c1   =   new   webs_reply(); 这个是完全没有必要的。