ASP.NET 中继器交替行突出显示没有完整的 <alternatingitemtemplate/>

Posted

技术标签:

【中文标题】ASP.NET 中继器交替行突出显示没有完整的 <alternatingitemtemplate/>【英文标题】:ASP.NET repeater alternate row highlighting without full blown <alternatingitemtemplate/> 【发布时间】:2010-10-25 06:30:18 【问题描述】:

我试图在我的 &lt;itemtemplate/&gt; 的备用行上简单地添加一个 css 类到一个 div 中,而不需要包含一个完整的 &lt;alternatingitemtemplate/&gt; 的开销,这将迫使我保持​​大量标记同步未来。

我已经看到了诸如 http://blog.net-tutorials.com/2009/04/02/how-to-alternate-row-color-with-the-aspnet-repeater-control/ 之类的解决方案,我很想使用它,但这对我来说仍然没有“味道”。

还有其他人有更易于维护和更直接的解决方案吗?理想情况下,我希望能够执行以下操作:

<asp:repeater id="repeaterOptions" runat="server">
        <headertemplate>
            <div class="divtable">
                <h2>Other Options</h2>
        </headertemplate>
        <itemtemplate>
                <div class="item <%# IsAlternatingRow ? "dark" : "light" %>">

但我不知道如何实现IsAlternatingRow - 即使使用扩展方法。

【问题讨论】:

【参考方案1】:

无需管理您自己的变量(递增计数器或布尔值);您可以查看内置的 ItemIndex 属性是否可被 2 整除,并使用它来设置 css 类:

class="<%# Container.ItemIndex % 2 == 0 ? "" : "alternate" %>"

这样做的好处是完全基于您的 UI 代码(ascx 或 aspx 文件),并且不依赖于 javascript

【讨论】:

了不起的理查德,这正是我要找的东西!显然可以像提到的其他一些答案一样使用 JS,但你说这是一个不必要的限制是正确的。 @Richard Ev:如果有人使用 ItemTemplate 和 AlternatingItemTemplate 而不是这个解决方案,代码会运行得更慢还是更快?我如何比较这两个相同代码的速度? @Răzvan:不确定性能差异,但我会警告不要过早优化这样的事情。 对于那些仍然来到这个目的地的人,您需要用单引号包裹服务器端逻辑块。否则,您可能会收到有关不允许使用文字控件的警告/错误 聚会迟到了,但和其他人一样,答案很好!无需重新发明***【参考方案2】:

IsAlternatingRow 可以是受保护的属性,并将在 ItemDataBound 或 ItemCreated 事件中设置。

protected void rpt_ItemDataBound(object sender, EventArgs e)

    IsAlternatingRow = !IsAlternatingRow;

【讨论】:

【参考方案3】:

使用 JQuery 应用类。

$('.divtable > div:odd').addClass('dark');
$('.divtable > div:even').addClass('light');

【讨论】:

【参考方案4】:

您可以改用 jQuery。对上一个问题的回答可能会有所帮助:jQuery Zebra selector

【讨论】:

这依赖于在浏览器中启用 JavaScript,这是一个不必要的限制。 这取决于在 JavaScript 不可用时工作所需的功能。在这种情况下,网站仍然可以工作,但表格的可读性会降低,我认为这是可以接受的。 好点,虽然我的一般方法是仅将 JavaScript 用于需要它的事情,或者没有它实现起来过于繁重的事情。在这种情况下,在没有 JavaScript 的情况下实现表格条带化是微不足道的,因此我的建议是。【参考方案5】:

C#

class="<%# Container.ItemIndex % 2 == 0 ? "" : "alternate" %>"

VB

class="<%# iif(Container.ItemIndex Mod 2 = 0,"","alternate") %>"

【讨论】:

【参考方案6】:

小调整:可以通过以下方式删除空类:

  <%# Container.ItemIndex % 2 == 0 ?  "<tr>" : "<tr class='odd'>"  %>

【讨论】:

【参考方案7】:

这对我有帮助

class='<%# Container.ItemIndex % 2 == 0 ? "" : "alternate" %>'

上一个答案导致“服务器标签格式不正确”错误。

【讨论】:

这是正确的形式,将服务器端解析为 html 属性时。【参考方案8】:

无需代码。这是一个纯 CSS 解决方案:

.item:nth-child(odd)background-color: #ccc
.item:nth-child()background-color: #ddd

https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child

【讨论】:

以上是关于ASP.NET 中继器交替行突出显示没有完整的 <alternatingitemtemplate/>的主要内容,如果未能解决你的问题,请参考以下文章

使用确认警报 ASP.Net 单击 Gridview LinkBut​​ton 上的突出显示行

使用 jQuery 突出显示选定的 ASP.NET DataGrid 行

asp.net 中继器 - 获取行项_DataBound 的值

ASP.NET,将数据绑定到 asp.net 控件并仅显示一次重复值

Telerik Radlistview 与嵌套的 ASP.NET 中继器

ASP.NET RadioButton 与名称(组名)混淆