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