2009-01-13 26 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

相關問題