Jon*_*han 3 asp.net user-controls ascx render
我已经创建了一个常规的ASP.NET用户控件,包括ascx文件.例如:
MyUserControl.ascx
MyUserControl.ascx.cs
Run Code Online (Sandbox Code Playgroud)
然后我尝试在运行时使用类似于以下代码的代码手动渲染控件:
var testMyUserControl = new MyUserControl();
var textWriter =
new HtmlTextWriter(
new System.IO.StringWriter(new StringBuilder()));
testMyUserControl.RenderControl(textWriter);
Console.Write(textWriter.InnerWriter.ToString());
Run Code Online (Sandbox Code Playgroud)
我放在ASCX文件中的任何内容似乎都没有呈现 - 静态HTML或任何.NET控件.
但是,如果我在代码隐藏中覆盖Render()方法并手动输出内容,则会进行渲染.
我在这里错过了什么?
您不需要自己渲染控件.如果您需要动态地将其添加到页面,您可以这样做:
UserControl myControl = (UserControl) Page.LoadControl("~/Controls/MyControl.ascx");
Page.Controls.Add(myControl);
Run Code Online (Sandbox Code Playgroud)
很可能你会想把它放在页面的某个部分,所以不要使用Page.Controls,而是使用占位符:
<asp:Placeholder ID="myPlaceHolder" runat="server" />
Run Code Online (Sandbox Code Playgroud)
并使用这样的代码:
myPlaceholder.Controls.Add(myControl);
Run Code Online (Sandbox Code Playgroud)
这是动态添加控件的最佳方法,但是如果你可以以声明方式执行它,那将会更容易.
<%@ Register TagPrefix="my" TagName="Control" Src="~/Controls/MyControl.ascx" %>
<my:Control ID="myControl" runat="server" />
Run Code Online (Sandbox Code Playgroud)
请记住:如果您要动态添加控件,请务必在每次加载页面时重新添加控件.
归档时间: |
|
查看次数: |
3224 次 |
最近记录: |