当数据源中没有项目时,如何停止显示转发器的标头模板
<asp:Repeater ID="TabsRepeater" runat="server" DataSource='<%#Eval("OrderedChildNodes") %>'>
<HeaderTemplate>
<ul class="child">
</HeaderTemplate>
<ItemTemplate>
转发器嵌套在另一个转发器控件中,因此在数据绑定之前无法检查。
答案 0 :(得分:4)
在您使用DataBind()...
之后
TabsRepeater.Visible = TabsRepeater.Items.Count > 0;
这使得整个转发器不可见,因为我假设它是一个&lt; / ul&gt;在您的页脚模板中,您也不想显示它。
答案 1 :(得分:1)
在其中放置一个空的文字控件,并在OnItemDataBound函数中设置它的值(对于页脚也是如此)。
嗯......或者甚至更简单一点,最初给它正确的文本但是从文字的.Visible属性设置为false开始,因此它不会呈现。然后在OnItemDatabound中将其设置为True。
答案 2 :(得分:0)
您也可以使标记有条件,请参阅下面的示例(未经测试)。
<asp:Repeater ID="TabsRepeater" runat="server" DataSource='<%#Eval("OrderedChildNodes") %>'>
<HeaderTemplate>
<% if ( ((yourType)Eval("OrderedChildNodes")).Count > 0 ) %>
<ul class="child">
</HeaderTemplate>
<ItemTemplate>
答案 3 :(得分:0)
这适用于IE9 +
ASPX:
<asp:Repeater runat="server" ID="rpHideHeaderIfNoData">
<HeaderTemplate>
<table class="hide-if-no-data">
<tr>
<th>ID</th>
<th>Name</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# ((MyModel)Container.DataItem).ID %></td>
<td><%# ((MyModel)Container.DataItem).Name %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
CSS:
.hide-if-no-data {
tr:only-child {
display: none;
}
}
答案 4 :(得分:-1)
这个怎么样:
<HeaderTemplate>
<ul class="child" visible='<%= (TabsRepeater.Items.Count > 0).ToString() %>'>
</HeaderTemplate>