将用户控件包含在ascx文件中的另一个用户控件的标记内

时间:2014-11-30 17:34:04

标签: asp.net design-patterns webforms user-controls

我一直在搜索这个问题几个小时但是,要么我在构建谷歌查询方面非常糟糕,要么就此没有太多信息。

我正在尝试构建一个可以“包装”其中的其他用户控件的用户控件,与<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()集合中动态添加控件。我只是想尽量避免这样做,因为手动为我必须添加的所有控件构建视图状态可能是***的真正痛苦。

1 个答案:

答案 0 :(得分:0)

发现它!

来源:here (SO)

我的最终代码(因为我使用的是vb.net):

<强> ParentControl.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

<强> ParentControl.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>