C# 我可以给GroupTemplate或ItemTemplate编号吗?

C# 我可以给GroupTemplate或ItemTemplate编号吗?,c#,asp.net,listview,paging,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

我想使用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>
转到第1组
去第二组
去第三组
  • 项目
  • 项目
  • 项目
  • 项目
  • 项目
  • 项目
  • 项目
  • 项目
  • 项目
在ListView中,使用GroupTemplate和ItemTemplate是否容易做到这一点

<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>

在您的aspx文件中:

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

我认为您无法对id进行数据绑定,因此我可能会使用隐藏字段,让JQuery对它们进行计数,或者使用CssClass。您可以使用
Container.DataItemIndex
获取您的号码

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

您可以将一个处理程序挂接到
ul
的Init事件,并向其附加一个数字,使其类似于
lv\u ctrl0\u 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>

无效组_Init(对象发送方,事件参数e){
((控件)sender.ID++=groupId++.ToString();
}
int-groupId=0;
  • 项目

  • 上述Keltex的解决方案只需稍加改动即可工作;使用伟大的简单解决方案,如果它有效,那将是伟大的。但是组属性从未从ListView.Huh调用。不能是数据绑定过程的一部分。怎么样?我发现它不能绑定GroupTemplate。不幸的是,这不起作用。我试图避免将数据拆分为列表列表和嵌套列表视图。我需要ID。嗯,我想在jQuery中完成这一切,但这并不是我需要的数量。我需要每个组的唯一ID。无法使用该类,因为上面的链接引用了那些ID(用于可访问性和页面内链接)Container.DataItemIndex是个好主意。是的,我正考虑这样做。我希望更好地控制ID的名称。编写相同的页面链接更容易。我使用jQueryUITabCtrl,它获取页面链接和ID,并将它们分别转换为选项卡头和选项卡体。因此,我需要可靠地引用这些id。我不熟悉UI选项卡Ctrl的细节,但您应该能够使用JQuery通过查找UL(某个类的或其id包含(*=)“组”)来动态查找id。哪个是SQL和group字段?
    <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>