新增一个用户控件WebUserControl1.ascx,页面中放一个textbox控件,然后在WebUserControl1.ascx的page load事件中设置textbox的值,控件定义一个公开方法传出textbox的值;然后在WebForm1.aspx页面中放入该控件,页面的page load中取得控件textbox的值,竟然为空,而用按钮点击取得是所要的。代码如下:
WebUserControl1.ascxprivate void Page_Load(object sender, System.EventArgs e)
{
TextBox1.Text = "dasf";
}
公开方法:
public string GetTextValue()
{
return TextBox1.Text;
}WebForm1.aspx
private void Page_Load(object sender, System.EventArgs e)
{
Label1.Text = WebUserControl11.GetTextValue();
         //这里竟然取得的始终为空,不知道为什么和该如何处理呢
}谢先。还有就是在page load中,是否判断IsPostBack都没什么影响。

解决方案 »

  1.   

    可能pageload 载入先于控件,
    还未等控件初始化完毕,你就调用了
      

  2.   

    你调用的是函数,你的组件的page_load根本没有执行啊
      

  3.   

    debug就知道为什么了!!
    先执行Page_load!!
      

  4.   

    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconDevelopingUserControlsInCode-BehindFile.asp
      

  5.   

    你应该定义公开类型的属性private int cW1; public object ColumnWidth1 { 
     get { 
       return cW1; 
     } 
     set { 
       cW1 = Value; 
     } 
      

  6.   

    你应该定义公开类型的属性WebUserControl1.ascxprivate void Page_Load(object sender, System.EventArgs e)
    {
    cW1 = 1;
        //在这里给内部变量赋值
    }
    private int cW1; public object ColumnWidth1 { 
     get { 
       return cW1; 
     } 
     set { 
       cW1 = Value; 
     } 
    private void Page_Load(object sender, System.EventArgs e)
    {
    Label1.Text = WebUserControl11.ColumnWidth1;
     }
      

  7.   

    公共方法改成:
    public string GetTextValue()
    {
    get
    {
    return TextBox1.Text;
    }
    set
    {
    TextBox1.Text = Value;
    }
    }
      

  8.   

    在WebForm1调用WebUserControl1.ascx的GetTextValue
    你的WebUserControl1.ascx的Page_load没有执行
    即使执行了
    若WebUserControl1。ascx已经退出,调用也是无效的
    应该这样
    public string GetTextValue()
    {
        get
          {
             return TextBox1.Text;
          }
        set
          {
             TextBox1.Text = Value;
          }
    }
      

  9.   

    WebUserControl1.ascx:private string a;private void Page_Load(object sender, System.EventArgs e)
    {
    TextBox1.Text = "sf";
              //a = "sf";
              //两种方式都不可以
    }public string Text1Value
    {
    get
            {
       return a;
    }
             set
    {
       a = TextBox1.Text;
    }
    }WebForm1.aspx
    private void Page_Load(object sender, System.EventArgs e)
    {
    Label1.Text = WebUserControl11.Text1Value;
    }按照以上代码依然不成,各位可以确认一下
      

  10.   

    不过我对这里有疑惑,上面的解答用的是Value,可是我用value编译不通过
    set
    {
       a = TextBox1.Text;
    }
      

  11.   

    sorry,大小写太敏感了,不过还是不行set
    {
       a = value;
    }
      

  12.   

    页面的OnLoad是先于子控件的OnLoad执行的,如果你在子控件的OnLoad里设置什么东西的话,在页面的OnLoad里是得不到这个设置的,试试在子控件的OnInit或LoadViewState里执行,但如果就是获取TextBox1当前数值的话,应该可以用 kflash(狂闪工作室) 的方式实现,虽然他写错了
    public string TextValue
    {
      get
      { 
         return TextBox1.Text;
      }
      set
      {
        TextBox1.Text = value;
      }
    }
    WebForm1.aspx
    private void Page_Load(object sender, System.EventArgs e)
    {
    Label1.Text = WebUserControl11.TextValue;
    }
      

  13.   

    思归大哥比我写的更简单一些
    你应该定义公开类型的属性WebUserControl1.ascxprivate void Page_Load(object sender, System.EventArgs e)
    {
    cW1 = TextBox1.Text;
         
        //在这里给内部变量赋值 要是从textbox负值 就这样写
    }
    private int cW1; public object ColumnWidth1 { 
     get { 
       return cW1; 
     } 
     set { 
       cW1 = Value; 
     } 
    private void Page_Load(object sender, System.EventArgs e)
    {
    Label1.Text = WebUserControl11.ColumnWidth1;
     }