Получите доступ к значению Repeater.Item.Count в методе codebehind - PullRequest
5 голосов
/ 11 мая 2011

У меня есть повторитель на моей странице:

<asp:Repeater id="attachmentsRepeater" runat="server">
    <HeaderTemplate>
        <% 
        if (attachmentsRepeater.Items.Count > 0) {
            if (attachmentsRepeater.Items.Count == 1) {
                Response.Write("<h3>Attachment</h3>");
                Response.Write("<p>");
            } else {
                Response.Write("<h3>Attachments</h3>");
                Response.Write("<ul>");
            }
        }
        %>
    </HeaderTemplate>
    <ItemTemplate>
        <%# OutputAttachment(Container)%>
    </ItemTemplate>  
    <FooterTemplate>
        <% 
        if (attachmentsRepeater.Items.Count > 0) {
            if (attachmentsRepeater.Items.Count == 1) {
                Response.Write("</p>");
            } else {
                Response.Write("</ul>");
            }
        }
        %>
    </FooterTemplate>
</asp:Repeater>

Исходный код ItemTemplate выглядел так:

<ItemTemplate>
    <%
    if (attachmentsRepeater.Items.Count > 0) {
        if (attachmentsRepeater.Items.Count > 1) {
            Response.Write("<li>");
        }
        %>
        <a href="<%# DataBinder.Eval(Container.DataItem, "location") %>">
            <%# DataBinder.Eval(Container.DataItem, "name") %>
        </a>
        <%
        if (attachmentsRepeater.Items.Count > 1) {
            Response.Write("<li>");
        }
    }
    %>
</ItemTemplate>  

В коде ниже я хотел бы получить доступ к количеству элементов в повторителе (строка 4):

public string OutputAttachment(RepeaterItem Container) {
    string returnValue = "";
    Repeater ContainerParent = (Repeater)Container.Parent;
    if (attachmentsRepeater.Items.Count > 0) {
        if (attachmentsRepeater.Items.Count > 1) {
            returnValue += "<li>";
        }
        returnValue += "<a href=\"" + DataBinder.Eval(Container.DataItem, "location");
        if (DataBinder.Eval(Container.DataItem, "location").ToString().EndsWith("/")) {
            returnValue += DataBinder.Eval(Container.DataItem, "name");
        }
        returnValue += ">" + DataBinder.Eval(Container.DataItem, "name") + "</a>";
        if (attachmentsRepeater.Items.Count > 1) {
            returnValue += "</li>";
        }
    }
    return returnValue;
}

Код, который выводится

<h3>Attachment</h3>
<p> </p>

Из этого вывода я знаю, что Item.Count == 1, так как есть выход, H3 является единичным и есть тег P. Если Item.Count> 1, H3 будет множественным числом и будет тег UL.

Этот метод codebehind выполняется до привязки данных? Есть ли обходные пути для этого? Спасибо за вашу помощь.

Раньше это работало для меня, но мне пришлось изменить его, чтобы выполнить новое требование, когда оно перестало работать.

1 Ответ

1 голос
/ 11 мая 2011

Лучшее место для привязки данных - это код в событии page_load или другое событие, которое вызывается при первом создании страницы.

Таким образом, вы можете контролировать привязку данных - и вызывать метод OuputAttachment после привязки данных - и вы можете быть уверены, что данные действительно существуют.

...