【问题标题】:stop header displaying on asp.net repeater停止在 asp.net 中继器上显示标题
【发布时间】:2009-07-15 16:55:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net data-binding


    【解决方案1】:

    DataBind() 之后...

    
    TabsRepeater.Visible = TabsRepeater.Items.Count > 0;
    

    这使得整个转发器不可见,因为我假设在您的页脚模板中有一个 您也不想显示。

    【讨论】:

      【解决方案2】:

      在其中放置一个空的文字控件并在 OnItemDataBound 函数中设置它的值(页脚相同)。


      嗯...或者更简单一点,最初给它正确的文本,但从文字的 .Visible 属性开始设置为 false ,这样它就不会呈现。然后只需在 OnItemDatabound 中将其设置为 True。

      【讨论】:

        【解决方案3】:

        您也可以使标记成为有条件的,请参见下面的示例(未经测试)。

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

        【讨论】:

        • 这是我的第一个想法,但它似乎并不喜欢给出错误:Eval()、XPath() 和 Bind() 等数据绑定方法只能在上下文中使用一个数据绑定控件。
        • 您是否偶然使用了 .Net 3.5 或更高版本的框架?如果是这样,我强烈建议用更灵活的 ListView 控件替换转发器控件,该控件具有处理空数据的实用程序。
        【解决方案4】:

        这应该适用于 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;
            }
        }
        

        【讨论】:

          【解决方案5】:

          这个怎么样:

          <HeaderTemplate>
             <ul class="child" visible='<%= (TabsRepeater.Items.Count > 0).ToString() %>'>
          </HeaderTemplate>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-19
            • 2023-03-27
            • 1970-01-01
            • 1970-01-01
            • 2012-03-22
            • 1970-01-01
            • 2011-09-27
            • 1970-01-01
            相关资源
            最近更新 更多