Обертывание пользовательского элемента управления внутри тегов другого пользовательского элемента управления в файле ascx

Я искал часы по этому вопросу, но либо я действительно плохо разбираюсь в запросах Google, либо об этом не так много информации.

Я пытаюсь создать пользовательский элемент управления, который может «обернуть» в него другие пользовательские элементы управления, точно так же, как это сделал бы <asp:Panel>. Думайте об этом как о прославленной панели (на самом деле, это именно то, что есть).

В идеале я хочу создать что-то вроде этого:

<muc:MyUserControl ID="parentControl" runat="server" etc>
    <mouc:MyOtherUserControl ID="childControl" runat="server" etc>
    </mouc>
</muc>

Я пытаюсь создать пользовательский элемент управления parentControl и заставить его «читать» все, что находится внутри него, и отображать/форматировать его определенным образом (на самом деле, просто поместите его в одну из его панелей).

Возможно, это не правильный путь, поэтому, пожалуйста, направьте меня в правильном направлении.

Спасибо!

ИЗМЕНИТЬ:

После рендеринга это будет идеальный HTML-код:

<div id="parentControl">
    <div>
        Stuff from parent (controls, html elements, etc)
    </div>
    <div class="childWrapper">
        <div id="childControl1" class="childControl">
        </div>
    </div>
</div>

PS: я знаю о динамически добавляемых элементах управления в коллекции Controls() пользовательского элемента управления. Я просто хочу попытаться избежать этого, так как создание состояния представления вручную для всех элементов управления, которые я должен добавить, может быть настоящей головной болью.


person tfrascaroli    schedule 30.11.2014    source источник
comment
@marc_s спасибо за редактирование.   -  person tfrascaroli    schedule 01.12.2014


Ответы (1)


Нашел!

Источник: здесь (SO)

Мой окончательный код (поскольку я использую vb.net):

Родительский контроль.ascx.vb:

Public Class ParentControl
    Inherits System.Web.UI.UserControl

    <PersistenceMode(PersistenceMode.InnerProperty)> _
    Public Property RightContent As PlaceHolder

    Private Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
        phRightContent.Controls.Add(Me.RightContent)
    End Sub

End Class

Родительский контроль.ascx:

<asp:UpdatePanel ID="UpdatePanel" runat="server">
    <div id="LeftContent" class="LeftContent">
        PARENT STUFF HERE
    </div>
    <asp:PlaceHolder ID="phRightContent" runat="server">
    </asp:PlaceHolder>
</asp:UpdatePanel>

WebForm.ascx:

<pc:ParentControl ID="ParentControl" runat="server" >
    <RightContent>
        <cc:ChildControl ID="ChildControl" runat="server" />
    </RightContent>
</pc:ParentControl>
person tfrascaroli    schedule 01.12.2014