停止在asp.net转发器上显示标题

时间:2009-07-15 16:55:10

标签: asp.net data-binding

当数据源中没有项目时,如何停止显示转发器的标头模板

            <asp:Repeater ID="TabsRepeater" runat="server" DataSource='<%#Eval("OrderedChildNodes") %>'>
                <HeaderTemplate>
                    <ul class="child">
                </HeaderTemplate>
                <ItemTemplate>

转发器嵌套在另一个转发器控件中,因此在数据绑定之前无法检查。

5 个答案:

答案 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>