有没有办法防止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>
答案 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");