如何防止在转发器中交替模板的itemtamplate中重复内容?

时间:2011-10-24 10:10:38

标签: asp.net .net repeater itemtemplate code-duplication

有没有办法防止itemtemplate内容的重复,这些内容只会出现交替模板块的不同css类?

<asp:Repeater ID="rptCommentHistory" runat="server">
    <ItemTemplate>
        <asp:Label ID="lblComment" runat="server" Text='<%#Eval("Comment").ToString() %>' 
          Class="itemTemplate"/>
     </ItemTemplate>

    <AlternatingItemTemplate>
       <asp:Label ID="lblComment" runat="server" Text='<%#Eval("Comment").ToString() %>' 
          Class="alternatingTtemTemplate"/>
    </AlternatingItemTemplate>
</asp:Repeater>

4 个答案:

答案 0 :(得分:4)

这应该做你想要的: - )

<asp:Repeater ID="rptData" runat="server">
    <ItemTemplate>
        <asp:Label ID="lblData" runat="server" Text='<%# Eval("Comments") %>' CssClass='<%# Container.ItemIndex%2==0?"itemTemplate":"alternatingTtemTemplate" %>'></asp:Label>
    </ItemTemplate>
    </asp:Repeater>

答案 1 :(得分:2)

我从不使用AlternatingItemTemplate。我不喜欢为了拥有一个交替的项目而复制我的代码,我认为如果代码是不同的,它不能被归类为重复,那么你不应该使用{{1}无论如何都要控制。

因此,我始终只使用Repeater,并在ItemTemplate事件中进行所需的任何更改。

要确定该项目是正常项目还是交替项目,我会执行以下操作:

ItemDataBound

在您的情况下,唯一的区别是对if ((e.Item.ItemIndex+1 % 2)=0){ //Alternating code here.. } Label的更改,因此我会执行以下操作:

CssClass

答案 2 :(得分:0)

这不是真的重复,不要担心。你正在按照预期实现这一点。

我能想到的唯一另一个选择是使用itemtemplate,编写一些在itemdatabound事件上触发的代码,并使用FindControl以编程方式更改css类。

我知道我宁愿使用哪个......

答案 3 :(得分:0)

由于似乎所提出的解决方案并不令人满意,并且没有其他“.net”解决方案,我建议您在javascript中执行此操作(因为它在纯CSS中不存在)。

jQuery允许您在选择器的偶数和赔率元素上应用不同的样式。 它应该与表行之外的其他元素一起使用...

所以这样的事情应该有效:

$("#rptCommentHistory span:even").addClass("itemTemplate");
$("#rptCommentHistory span:odd").addClass("alternatingTtemTemplate");

或者您可以将ItemTemplate设置为所有元素并使用(它可能表现更好):

$("#rptCommentHistory span:odd").removeClass("ItemTemplate").addClass("alternatingTtemTemplate");