我对ASP.net中的转发器有疑问
我有2个中继器嵌套。
每当儿童中继器没有物品时,我想隐藏父母和儿童中继器。
每个父母及其子项都会提供独特的类,例如'class =“childlist_1”'。
ascx文件:
<asp:Repeater ID="ParentRepeater" runat="server">
<ItemTemplate>
<ul class="Mainlist">
<li>
<h3 class="selected"><a href="#">List 1</a></h3>
<ul id="DomainList" class="child-items" runat="server">
<asp:Repeater ID="ChildRepeater" runat="server">
<ItemTemplate><li><a href="#">Link to child item</a></li></ItemTemplate>
</asp:Repeater>
</ul>
</li>
</ul>
</ItemTemplate>
</asp:Repeater>
最佳解决方案是什么?
提前致谢!
答案 0 :(得分:2)
您可以在ItemDataBound事件
中执行此操作protected void ParentRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item)
{
// code that binds ChildRepeater
.....
// check if ChildRepeater has no items
if (((Repeater)e.Item.FindControl("ChildRepeater")).Items.Count == 0)
{
e.Item.Visible = false;
}
}
}
答案 1 :(得分:0)
如果像我一样你想使用一种方法来绑定子转发器(即DataSource='<%# GetChildDatasource(Eval("parentID").ToString()) %>'
),那么在父触发的itemdatabound方法被触发后数据源被绑定时,这将无法工作。
解决方法是在子转发器上使用PreRender方法:
protected void ChildRpt_PreRender(object sender, EventArgs e)
{
//hide if empty
Repeater rpt = (Repeater)sender;
rpt.Visible = rpt.Items.Count > 0;
}