3

ascxファイルを含む通常のASP.NETユーザーコントロールを作成しました。例えば:

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 に答える