1

次のマークアップを使用したWebユーザーコントロールがあります

<table>
    <tr>
        <td>
            <h1>
                <%= this.Title %></h1>
        </td>
    </tr>
    <tr>
        <td>
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
        </td>
    </tr>
    <tr>
        <td>
            <h2>
                Footer</h2>
        </td>
    </tr>
</table>

背後にあるコード:

[ParseChildren(true, "Content"), PersistChildren(true)]
public partial class WebUserControl1 : System.Web.UI.UserControl
{
    public string Title { get; set; }

    [PersistenceMode(PersistenceMode.InnerDefaultProperty),
    TemplateContainer(typeof(ContentContainer)), 
    TemplateInstance(TemplateInstance.Single),
    DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]        
    public ITemplate Content { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        PlaceHolder1.Controls.Clear();
        var container = new ContentContainer();

        this.Content.InstantiateIn(container);
        PlaceHolder1.Controls.Add(container);
    }
}

public class ContentContainer : Control, INamingContainer
{
}

次のようなページで使用する

<%@ Register Src="WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="uc1" %>
<uc1:WebUserControl1 ID="WebUserControl11" runat="server" Title="The Title">
    <Content>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></Content>
</uc1:WebUserControl1>

ページを実行すると、うまく実行されました。デザインモードでページを表示すると、次のエラーが発生しました。

タイプ「System.Web.UI.UserControl」には、「Content」という名前のパブリックプロパティがありません。

この問題を解決するにはどうすればよいですか?

編集:コードを変更しました

4

2 に答える 2

3

MSDNから方法:テンプレート化されたASP.NETユーザーコントロールを作成する

注:テンプレート化されたASP.NETユーザーコントロールは、VisualStudioデザイナーではサポートされていません。ただし、この例をコンパイルしてVisualStudioで実行することはできます。これを行うには、ASP.NETページを作成してこのコードをテストするときに、ページ内のデザイナーが生成したすべてのコードを、サンプルリストのコードとマークアップに置き換えます。

于 2011-07-30T19:31:21.153 に答える
0

以下のように、parsechildrenプロパティをユーザーコントロールクラスに追加する必要があります。

ParseChildren(true, "Content")
public partial class WebUserControl1 : System.Web.UI.UserControl

これは、ContentProviderコントロールで、その内部コントロールが解析され、Childrenプロパティに追加されることを意味します。設計時には、子が制御するときにそれらが永続化されます。詳細については、このリンクを確認してください。

于 2011-07-26T18:02:54.457 に答える