2

我想使用 GroupTemplate 将项目列表分成组。但是,我需要按顺序对每个组进行编号,以便我可以链接到它们并实现一些 JS 分页。我绑定到一个 IEnumerable

这是一些伪代码。我希望输出看起来像这样:

<a href="#group1">Go to Group 1<a>
<a href="#group2">Go to Group 2<a>
<a href="#group3">Go to Group 3<a>

<ul id="group1">
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
</ul>
<ul id="group2">
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
</ul>
<ul id="group3">
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
</ul>

使用 GroupTemplate 和 ItemTemplate 在 ListView 中是否容易做到这一点?

<asp:ListView ID="lv" runat="server" GroupPlaceholderID="groupPlaceholder">
    <LayoutTemplate>
        <asp:PlaceHolder ID="groupPlaceholder" runat="server"></asp:PlaceHolder>
    </LayoutTemplate>
    <GroupTemplate>
        <ul id="<!-- group-n goes here -->">
            <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
        </ul>
    </GroupTemplate>
    <ItemTemplate>
        <li>Item</li>
    </ItemTemplate>
</asp:ListView>

我可以从数据源和基本数学获取顶部链接的组数,但是如何将id="groupN"数字输入模板?

4

3 回答 3

4

我不认为你可以 DataBind id,所以我可能会使用隐藏字段,让 JQuery 计算它们,或者使用 CssClass。您可以使用Container.DataItemIndex来获取您的号码。

编辑:只需将其更改ul为 runat="server",ASP.NET 就会以臭名昭著的 INamingContainer 格式为您生成一个唯一的 ID。这也将包括一个索引,尽管它类似于lv_ctrl0_group, 并且是一个实现细节。

您可以将处理程序挂接到ul的 Init 事件并为其附加一个数字,使其类似于lv_ctrl0_group1. 我不认为您可以很容易地摆脱预先添加的 INamingContainer 的东西,这可能会破坏任何 IPostDataHandler 控件。

<script runat="server">
    void Group_Init(object sender, EventArgs e) {
       ((Control)sender).ID += groupId++.ToString();
    }
    int groupId = 0;
</script>

<asp:ListView id="lv" runat="server" GroupItemCount="3">
    <LayoutTemplate>
        <asp:PlaceHolder ID="groupPlaceHolder" runat="server" />
    </LayoutTemplate>
    <GroupTemplate>
        <ul id="group" runat="server" oninit="Group_Init">
            <asp:PlaceHolder ID="itemPlaceHolder" runat="server"/>
        </ul>
    </GroupTemplate>
    <ItemTemplate>
        <li>Item</li>
    </ItemTemplate>
</asp:ListView>
于 2009-03-24T20:58:31.370 回答
1

在您的 aspx 文件中:

<GroupTemplate>
  <ul id='<%# "group"+GroupNumber %>'>
    <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
  </ul>
</GroupTemplate>

在您的代码后面(假设 C#):

int _GroupNumber=0;

protected string GroupNumber
{
   get { return (++_GroupNumber).ToString(); }
}
于 2009-03-24T00:25:02.223 回答
1

上面 Keltex 的解决方案只需稍作改动即可;使用<%=而不是<%#

<%#不起作用,因为 GroupTemplate 不支持数据绑定

于 2010-03-28T12:18:49.990 回答