ASP.NET转发器交替行突出显示没有完全烧断<alternatingitemtemplate />

Kie*_*ton 54 c# asp.net data-binding extension-methods repeater

我正在尝试简单地将css类添加到我的备用行中的div上,<itemtemplate/>而不会包含完全爆炸的开销,<alternatingitemtemplate/>这将迫使我在将来保持大量标记同步.

我见过一个解决方案,比如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" %>">
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何实现IsAlternatingRow- 即使使用扩展方法.

Ric*_*ett 128

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

class="<%# Container.ItemIndex % 2 == 0 ? "" : "alternate" %>"
Run Code Online (Sandbox Code Playgroud)

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

  • 每当somene使用它时,一个新的独角兽就会诞生! (4认同)
  • 神奇的理查德,这正是我一直在寻找的东西!显然可以使用JS像所提到的其他一些答案,但你说这是一个不必要的限制是正确的. (3认同)
  • 对于那些仍然来到这个目的地的人,你需要用单引号包装服务器端逻辑块.否则,您可能会收到有关不允许使用Literal Controls的警告/错误 (3认同)
  • @Răzvan:不确定性能差异,但我警告不要过早优化这样的事情. (2认同)

小智 17

C#

class="<%# Container.ItemIndex % 2 == 0 ? "" : "alternate" %>"
Run Code Online (Sandbox Code Playgroud)

VB

class="<%# iif(Container.ItemIndex Mod 2 = 0,"","alternate") %>"
Run Code Online (Sandbox Code Playgroud)


Sev*_*ven 6

这对我有帮助

class='<%# Container.ItemIndex % 2 == 0 ? "" : "alternate" %>'
Run Code Online (Sandbox Code Playgroud)

以前的答案导致"服务器标签格式不正确"错误.