C# 如何将ASP.Net用户控件嵌套在其内部?

C# 如何将ASP.Net用户控件嵌套在其内部?,c#,asp.net,vb.net,user-controls,C#,Asp.net,Vb.net,User Controls,我认为简单的答案是你不能,但必须有办法让它发生。我想制作一个项目列表,然后在其中有一个项目列表,只嵌套一个级别。即: Repeater UserControl1 UserControl1 UserControl1 UserControl1 UserControl1 UserControl1 UserControl1 如果可能的话,我真的很想避免使用LoadControl,因为我在服务器

我认为简单的答案是你不能,但必须有办法让它发生。我想制作一个项目列表,然后在其中有一个项目列表,只嵌套一个级别。即:

 Repeater  
    UserControl1  
        UserControl1  
        UserControl1  
    UserControl1
        UserControl1  
    UserControl1  
    UserControl1  
如果可能的话,我真的很想避免使用LoadControl,因为我在服务器端单击事件中添加了这个列表,所以我无法在PageInit上执行LoadControl以使所有viewstate的内容正常工作

我将尝试编写一个快速的psuedo代码示例,它如下所示:

Page.aspx

<asp:repeater runat="Server" id="someRepeater">
<uc:UserControl1 runat="Server" id="ctrlParent" />
</asp:repeater>
<asp:label id="label1" runat="server" />
<asp:repeater runat="server" id="childRepeater">
    <uc:UserControl1 runat="server" id="ctrlChild" />
</asp:repeater>

只需在要调用另一个用户控件的用户控件中调用
。。在另一个用户控件中调用用户控件与在普通aspx页面中调用用户控件相同。

您可以在中继器中嵌套中继器

<asp:repeater runat="Server" id="someRepeater1">
    <uc:UserControl1 runat="Server" id="ctrlParent1" />
    <asp:repeater runat="Server" id="someRepeater2">
        <uc:UserControl1 runat="Server" id="ctrlParent2" />
    </asp:repeater>
</asp:repeater>

我就是这么做的。基本上,使用LoadControl添加的控件将在回发后消失,所以我所做的只是在
Page\u Load

Private Sub AddSubCategorizedQuestionItemControls()

    If rptSubCategorizedquestionList.Items IsNot Nothing AndAlso
        rptSubCategorizedquestionList.Items.Count > 0 Then

        For Each _item As RepeaterItem In rptSubCategorizedquestionList.Items

            If _item.ItemType = ListItemType.AlternatingItem OrElse
                     _item.ItemType = ListItemType.Item Then

                Dim _hfCategoryID As HiddenField = _item.FindControl("hfCategoryID")

                Dim _placeHolderSubCategoryQuestionItem As PlaceHolder = _item.FindControl("placeHolderSubCategoryQuestionItem")

                Dim _nestedCategorizedListItemControlUserControlObject As UserControl =
                                                                LoadControl("__categorizedQuestionListItem.ascx")

                _nestedCategorizedListItemControlUserControlObject.ID =
                                      String.Format("ucCategorizedQuestionListItem", _hfCategoryID.Value)

                _placeHolderSubCategoryQuestionItem.Controls.Add(_nestedCategorizedListItemControlUserControlObject)

                Dim _nestedCategorizedListItem As Common_Questions__categorizedQuestionListItem =
                    DirectCast(_nestedCategorizedListItemControlUserControlObject, Common_Questions__categorizedQuestionListItem)

            End If

        Next

    End If

End Sub

您可以嵌套不同的实例。如果将其放入实例本身,则会产生循环引用错误。我甚至尝试将用户控件放在一个新的用户控件中。。。ie:UserControl1Child,它只不过是父项的容器UserControl。这也给了我一个循环参考误差。将它们也放在不同的目录中。如果没有看到您的代码,也不知道用户控件是如何实现的,就不可能完全回答这个问题。这是可行的,如果有办法让实际的用户控件成为控件层次结构中其子项的父项,那就太好了,而且没有一个子项目的列表在它后面的一个重复。张贴确切的来源,我们不能没有粘土砖
Private Sub AddSubCategorizedQuestionItemControls()

    If rptSubCategorizedquestionList.Items IsNot Nothing AndAlso
        rptSubCategorizedquestionList.Items.Count > 0 Then

        For Each _item As RepeaterItem In rptSubCategorizedquestionList.Items

            If _item.ItemType = ListItemType.AlternatingItem OrElse
                     _item.ItemType = ListItemType.Item Then

                Dim _hfCategoryID As HiddenField = _item.FindControl("hfCategoryID")

                Dim _placeHolderSubCategoryQuestionItem As PlaceHolder = _item.FindControl("placeHolderSubCategoryQuestionItem")

                Dim _nestedCategorizedListItemControlUserControlObject As UserControl =
                                                                LoadControl("__categorizedQuestionListItem.ascx")

                _nestedCategorizedListItemControlUserControlObject.ID =
                                      String.Format("ucCategorizedQuestionListItem", _hfCategoryID.Value)

                _placeHolderSubCategoryQuestionItem.Controls.Add(_nestedCategorizedListItemControlUserControlObject)

                Dim _nestedCategorizedListItem As Common_Questions__categorizedQuestionListItem =
                    DirectCast(_nestedCategorizedListItemControlUserControlObject, Common_Questions__categorizedQuestionListItem)

            End If

        Next

    End If

End Sub