5

我有一个名为 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。我做错了什么?

4

3 回答 3

9

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

于 2008-09-24T14:17:27.293 回答
0

不久前,我自己也遇到了这个问题。您需要使用 LoadControl() 方法。看看这个页面就可以了。

于 2008-09-24T14:22:26.750 回答
0

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

你的代码:

Controls.Add( GenerateDateTime(parameter) );

尝试:

Page.Form.Controls.Add( GenerateDateTime(parameter) );
于 2008-09-24T14:24:39.977 回答