我可以为GroupTemplate或ItemTemplate编号吗?

时间:2009-03-23 22:31:01

标签: c# asp.net listview paging

我想使用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”数字?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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(); }
}

答案 2 :(得分:1)

Keltex上面的解决方案可以进行一些小改动;使用&lt;%= 代替&lt;%#

&lt;%#无效,因为GroupTemplate不支持数据绑定