Элемент управления ASP.NET Repeater: как не отображать шаблон заголовка, если в хранилище данных нет элементов? - PullRequest
0 голосов
/ 21 февраля 2011

Я хочу, чтобы мой HTML-код верхнего и нижнего колонтитула не записывался в случае, если в источнике данных нет элементов.

Как мне это сделать?

Ответы [ 4 ]

6 голосов
/ 21 февраля 2011

Я бы рекомендовал установить для видимости Repeater значение false, если в источнике данных нет элементов.

1 голос
/ 01 мая 2015

используя идею Кибердрю о том, чтобы сделать ее невидимой, следующий код работал для меня, где я смог правильно рассчитать количество элементов.

void Repeater1_PreRender(object sender, EventArgs e)
{
Repeater rpt = (Repeater)sender;
if (rpt.Items.Count == 0)
{
    rpt.Visible = false;
}
}
1 голос
/ 23 августа 2011

, если вы хотите использовать jQuery, см. Ниже

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server">
    <script type="text/javascript">
        $(document).ready(function () { if ($("#divItemDetails").text().length > 0) { $('#RepeaterDiv').show(); } });
    </script>
    <div style="overflow: hidden; display: none" id="RepeaterDiv">
        <asp:Repeater runat="server" ID="RepeaterID" DataSourceID="RepeaterDataSource">
            <HeaderTemplate>
                All Names </br>
            </HeaderTemplate>
            <ItemTemplate>
                </br>
                <div id="divItemDetails">
                    <%# Container.DataItem%>
                </div>
                </br>
            </ItemTemplate>
        </asp:Repeater>
        <asp:ObjectDataSource runat="server" ID="RepeaterDataSource" SelectMethod="GetAllEmployees"
            TypeName="MyCustomBAL" />
    </div>
    </form>
</body>
</html>
0 голосов
/ 05 сентября 2013

Это дочерний ретранслятор с вложенным образцом ретранслятора, который обращается к источнику данных родительского ретранслятора
Я рекомендую следующее, это, кажется, работает хорошо для меня. Обратите внимание, что я использую верхний и нижний колонтитулы и заполняю тег ul условно на основании того, что существуют дочерние узлы родительского sitemapnode.

Если у узла есть дочерние элементы, мы знаем, как выписать тег ul.

Обратите внимание на двойное приведение, которое мы должны использовать для получения родительского источника данных SiteMapNode.

<div class="menu mainNav">
<asp:Repeater ID="rptrMainMenu" runat="server" DataSourceID="sdsMain">
<ItemTemplate>
<%--<li>--%>
<%--<asp:HyperLink runat="server" NavigateUrl='<%#Eval("Url")%>'><%#Eval("Title") %></asp:HyperLink>--%>
<asp:Repeater ID="rptrsub1" runat="server" DataSource='<%#CType(Container.DataItem,SiteMapNode).ChildNodes %>'>
<HeaderTemplate>
<ul class='mainmenu'>
</HeaderTemplate>
<ItemTemplate>
<li class='submenu'>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%#Eval("Url")%>'><%#Eval("Title") %></asp:HyperLink>
<asp:Repeater ID="rptrsub1" runat="server" DataSource='<%#CType(Container.DataItem,SiteMapNode).ChildNodes%>'>
<HeaderTemplate>
<%-- <%# If(CStr(Eval("Title") & "") = "", "", "<ul class='submenu'>")%>--%>
 <%-- <% System.Diagnostics.Debugger.Break()%>--%>
<%# If(CType(CType(Container.Parent.Parent, RepeaterItem).DataItem, SiteMapNode).HasChildNodes, "<u class='submenu'>", "")%>
</HeaderTemplate>
<ItemTemplate>
<li class='submenu'>
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%#Eval("Url") %>'><%#Eval("Title")%></asp:HyperLink>
</li>
</ItemTemplate>
<FooterTemplate>
<%# If(CType(CType(Container.Parent.Parent, RepeaterItem).DataItem, SiteMapNode).HasChildNodes, "</u>", "")%>
</FooterTemplate>
</asp:Repeater>
</li>
</ItemTemplate>
<FooterTemplate>
</ul></FooterTemplate>
</asp:Repeater>
<%-- </li>--%>
</ItemTemplate>
    </asp:Repeater>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...