如何访问UserConrturl';在这种情况下的控制

本文关键字:这种情况下 控制 UserConrturl 何访问 访问 | 更新日期: 2023-09-27 17:49:39

  1. 我有一个UpdatePanel
  2. 我在这个更新面板里有一个占位符
  3. 有许多UserControls。其中一个将被动态加载,根据一些选择。

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

    TextBox mytextbox = (TextBox) Page.FindControl("myusercontrol")
        .FindControl("mytextbox");
    

问题是文本总是空的!

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

如何访问UserConrturl';在这种情况下的控制

您应该加载UserControl覆盖OnInit,如前所述。为什么要在整个页面上查找UserControl?您可以使用占位符。控件。。。

这就是我如何让它工作

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;
}

当您说text is always empty时,确实意味着TextBox对象为null或实际上为。文本框的文本为空?

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

试着发回服务器,看看这是否有帮助。

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

例如:

public class YourControl : UserControl
{
  public string Text
  {
    get
    {
      return this.TextBox1.Text;
    }
  }
}

通常,用户控件用于封装-您将控件、行为等的所有细节封装在UC中,这样其他代码就不必处理它了。

通过直接引用UC内的控件(通过名称或ID(,您正在打破模型。我可以建议你不要这样做吗?相反,如果你需要从UC获得信息,你可以向其中添加一个容器可以调用的属性、事件或方法。

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

如果您能让我们知道您为什么需要这些信息或关于该示例的更具体的细节,也许我们可以建议一些代码来实现它。

那么,我该怎么办?

只需手动获取发布的值。

Request.Form[yourcondeol.UniqueID]

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

Request.Form