访问代码隐藏方法中的 Repeater.Item.Count 值

本文关键字:Repeater Item Count 代码 隐藏 方法 访问 | 更新日期: 2023-09-27 17:56:12

我的页面上有一个中继器:

<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 标签。

此代码隐藏方法是否在绑定数据之前运行?有什么解决方法吗?感谢您的帮助。

这以前对我有用,但我不得不更改它以满足新的要求,也就是它停止工作的时候。

访问代码隐藏方法中的 Repeater.Item.Count 值

执行数据绑定的最佳位置是在 page_load 事件或首次创建页面时触发的某个其他事件中的代码隐藏中。

这样,您可以控制何时绑定数据 - 并且可以在绑定数据后调用 OuputAttachment 方法 - 并且可以确保数据确实存在。