如何在这种情况下访问UserConrtorl的控件

时间:2011-04-09 18:05:49

标签: c# asp.net user-controls

  1. 我有一个UpdatePanel。
  2. 我在此UpdatePanel中有一个PlaceHolder。
  3. 有许多UserControl。其中一个将动态加载, 根据一些选择。

    Control mycontrol = this.Page.LoadControl("myusercontrol.ascx");
    myplaceholder.Controls.Add(mycontrol);
    
  4. 加载特定的UserControl后,我想写入文本 从父页面加载的UserControl中的TextBox。

    TextBox mytextbox = (TextBox) Page.FindControl("myusercontrol")
        .FindControl("mytextbox");
    
  5. 问题是文字总是空的!

    我错过了什么? 感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

如上所述,您应该加载UserControl覆盖OnInit。你为什么要整个页面找到UserControl?你可以使用PlaceHolder.Controls ......

这是我如何运作的

protected override void OnInit(EventArgs e)
{
    Control userControl = this.Page.LoadControl("WebUserControl.ascx");
    testPlaceHolder.Controls.Add(userControl);
    userControl.ID="id"; 
    base.OnInit(e);
}
protected void testButton_Click(object sender, EventArgs e)
{
    Control testUserControl = (Control)testPlaceHolder.Controls[0];
  //Control testUserControl=(Control)testPlaceHolder.FindControl("id");
    TextBox mytextbox = (TextBox)testUserControl.FindControl("testTextBox");
    testButton.Text = mytextbox.Text;
}

答案 1 :(得分:0)

当你说text is always empty时,意味着TextBox对象是null还是字面上文本框的.Text是空的?

请记住,在Web应用程序中,您必须回发到服务器以刷新结果并更新控件等。

尝试回发到服务器并查看是否有帮助。

答案 2 :(得分:0)

您是否考虑过向用户控件添加属性以返回文本?

例如:

public class YourControl : UserControl
{

  public string Text
  {
    get
    {
      return this.TextBox1.Text;
    }
  }
}

答案 3 :(得分:0)

通常,用户控件用于封装 - 您在UC中包含控件,行为等的所有细节,因此其他代码不必处理它。

通过直接引用UC中的控件 - 按名称或ID - 您打破了模型。我是否可以建议您不要这样做,相反,如果您需要从UC获取信息,您可以为其添加容器可以调用的属性,事件或方法。

这样,如果您需要更改UC控件名称,类型,样式或其他逻辑稍后使用 - 您只需要更改UC中的属性/事件/方法,而不是(例如)100它可能会在代码中使用。

如果您可以告诉我们您为何需要此信息或有关该示例的更多具体细节,或许我们可以建议一些代码来实现此目的。

答案 4 :(得分:0)

  

那么,我该怎么办?

手动获取已过帐的值。

Request.Form[yourcondeol.UniqueID]

通过调试,您可以看到所有发布的数据。

Request.Form