【问题标题】:Controls do not appear on dynamically created user control控件不会出现在动态创建的用户控件上
【发布时间】:2008-09-24 14:15:36
【问题描述】:

我有一个名为 DateTimeUC 的用户控件,它的标记上有两个文本框:

<asp:TextBox ID="dateTextBox" runat="server"></asp:TextBox>
<asp:TextBox ID="timeTextBox" runat="server"></asp:TextBox>

我正在另一个用户控件中动态创建此控件:

Controls.Add(GenerateDateTime(parameter));
private DateTimeUC GenerateDateTime(SomeParameter parameter)
{
    DateTimeUC uc = new DateTimeUC();
    uc.ID = parameter.Name;
    return uc;
}

但是当我渲染页面时,DateTimeUC 什么也不渲染。我是这样检查的:

protected override void Render(HtmlTextWriter writer)
{
    base.Render(writer);

    StringBuilder builder = new StringBuilder();
    StringWriter swriter = new StringWriter(builder);
    HtmlTextWriter hwriter = new HtmlTextWriter(swriter);
    base.Render(hwriter);
    string s = builder.ToString();
}

s 为空,Controls.Count 为 0。我做错了什么?

【问题讨论】:

    标签: asp.net user-controls dynamic-controls


    【解决方案1】:

    您必须使用LoadControl( "your_user_control_app_relative_path.ascx" ) 方法而不是“DateTimeUC uc = new DateTimeUC();”

    【讨论】:

    • 整天都在寻找这个问题的答案。谢谢!
    • 如何加载嵌入在 dll 中的用户控件?
    • @Zolomon:您需要 .ascx 文件。 *.ascx 文件包含用于自动生成的类的 asp.net 标记。自动生成的类继承自程序集中的类 (.dll)。
    【解决方案2】:

    前段时间我自己也遇到过这个问题。您需要使用 LoadControl() 方法。看看this page就可以了。

    【讨论】:

      【解决方案3】:

      我认为您想将控件添加到页面的表单而不是表单本身。

      你的代码:

      Controls.Add( GenerateDateTime(parameter) );
      

      尝试:

      Page.Form.Controls.Add( GenerateDateTime(parameter) );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 2017-07-22
        • 1970-01-01
        • 2011-06-10
        • 2011-06-27
        相关资源
        最近更新 更多