Ошибка в пользовательском веб-контроле с ITemplate в режиме разработки - PullRequest
1 голос
/ 26 июля 2011

У меня есть пользовательский веб-элемент управления со следующей разметкой

<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' не имеет открытого свойства с именем 'Содержание'. * * 1013

Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ: я изменил код

Ответы [ 2 ]

3 голосов
/ 30 июля 2011

Из MSDN Как: создать шаблонные пользовательские элементы управления ASP.NET

Примечание: Шаблонные пользовательские элементы управления ASP.NET не поддерживаются в конструкторе Visual Studio. Однако этот пример можно скомпилировать и запустить в Visual Studio. Для этого при создании страниц ASP.NET для тестирования этого кода замените весь созданный дизайнером код на страницах кодом и разметкой в ​​листингах примеров.

0 голосов
/ 26 июля 2011

Вам необходимо добавить свойство parse children в класс пользовательских элементов управления, как показано ниже.

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

Это означает, что в элементе управления ContentProvider его внутренние элементы управления будут проанализированы и добавлены в его свойство Children.Во время разработки они будут сохранены как дочерние элементы управления.Проверьте эту ссылку для деталей.

...