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 用户控件

注意:Visual Studio 设计器不支持模板化的 ASP.NET 用户控件。但是,您可以在 Visual Studio 中编译和运行此示例。为此,当您创建 ASP.NET 页面来测试此代码时,请将页面中所有设计器生成的代码替换为示例清单中的代码和标记。

于 2011-07-30T19:31:21.153 回答
0

您需要将 parse children 属性添加到您的用户控件类,如下所示。

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

这意味着在 ContentProvider 控件中,其内部控件将被解析并添加到其 Children 属性中。在设计时,它们将作为其子控件持续存在。检查此链接以获取详细信息。

于 2011-07-26T18:02:54.457 回答