2009-01-13 52 views
3

我创建了一个常规的ASP.NET用户控件,包括ascx文件。例如:当我在运行时实例化一个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()方法并手动输出内容,它会呈现。

我在这里错过了什么?

回答

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

这是增加一个控制动态的最佳方式,但如果你能做到这一点声明instea那会容易得多。

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

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

记住:如果你是动态添加的控制,一定要re-add the control every page load

+0

如果我在网站项目中这样做,你建议的方法可以正常工作,但是如何在例如控制台应用程序中执行此操作,而不是扩展页面的普通类中? – Jonathan 2009-01-14 01:13:29

相关问题