3

我创建了一个常规的 ASP.NET 用户控件,包括 ascx 文件。例如:

MyUserControl.ascx
MyUserControl.ascx.cs

然后我尝试在运行时使用类似于以下代码的代码手动呈现控件:

var testMyUserControl = new MyUserControl();
var textWriter = 
    new HtmlTextWriter(
        new System.IO.StringWriter(new StringBuilder()));
testMyUserControl.RenderControl(textWriter);
Console.Write(textWriter.InnerWriter.ToString());

我放入 ASCX 文件中的任何内容似乎都无法呈现 - 静态 HTML 或任何 .NET 控件。

但是,如果我在代码隐藏中覆盖 Render() 方法并手动输出内容,它会呈现。

我在这里想念什么?

4

1 回答 1

8

你不需要自己渲染你的控件。如果您需要将其动态添加到页面,您可以这样做:

UserControl myControl = (UserControl) Page.LoadControl("~/Controls/MyControl.ascx");
Page.Controls.Add(myControl);

您很可能希望将其放置在页面的某个部分,因此不要使用 Page.Controls,而是使用占位符:

<asp:Placeholder ID="myPlaceHolder" runat="server" />

并使用这样的代码:

myPlaceholder.Controls.Add(myControl);

这是动态添加控件的最佳方式,但如果您可以以声明方式进行,那将会容易得多。

<%@ Register TagPrefix="my" TagName="Control" Src="~/Controls/MyControl.ascx" %>

<my:Control ID="myControl" runat="server" />

请记住:如果您要动态添加控件,请务必在每次页面加载时重新添加控件

于 2009-01-13T23:33:20.357 回答