如何在<;项目模板>;(.NET)?
我正在为这个网站使用EPiServer。与如何在<;项目模板>;(.NET)?,.net,css,repeater,modulo,itemtemplate,.net,Css,Repeater,Modulo,Itemtemplate,我正在为这个网站使用EPiServer。与asp:DataList不同,epserver:PAgeList没有AlternatingItemTemplate 所以我需要创建一个计数器并在我的中增加这个计数器,然后使用模数返回要附加到文章/页面的css样式 模数“代码”-源代码隐藏: return index % 2 == 0 ? "styleA" : "styleB"; protected Int32 ItemIndex; 但是我不能在中添加一个计数器并增加这个值 非常感谢您的任何建议 更
asp:DataList
不同,epserver:PAgeList没有AlternatingItemTemplate
所以我需要创建一个计数器并在我的
中增加这个计数器,然后使用模数返回要附加到文章/页面的css样式
模数“代码”-源代码隐藏:
return index % 2 == 0 ? "styleA" : "styleB";
protected Int32 ItemIndex;
但是我不能在
中添加一个计数器并增加这个值
非常感谢您的任何建议
更新这是我的EPiServer页面列表控制器:
<EPiServer:PageList runat="server" id="pageList" SortDirection="Ascending" Count="4" OnDataBinding="pageList_OnDataBinding">
<HeaderTemplate>
<ul id="articleList1">
</HeaderTemplate>
<ItemTemplate>
<li>
<h2><a href="<%# Eval("LinkURL") %>" title="<%# Eval("PageName") %>"><EPiServer:Property id="Property1" PropertyName="PageName" runat="server" /></a></h2>
<div class="articleImage">
<%# ArticleImage(Container.CurrentPage)%>
</div>
<div class="introText">
<%# IntroText(Container.CurrentPage)%>
</div>
<div class="readMore floatRight"><a href="<%# Eval("LinkURL") %>" title="<%# Eval("PageName") %>">Les mer</a></div>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</EPiServer:PageList>
当我在服务器控件中遇到此类问题时,我通常只是手动将其css化如果您所要寻找的只是一些用于替换行的视觉样式,那么在客户端上使用Javascript和jQuery在运行时操纵样式可能会更成功。在某些情况下,您可以使用纯CSS获得所需的结果(但这可能会导致在不同浏览器中的实现看起来不一样) 如果确实需要为交替行呈现不同的信息,则可能需要向要绑定的数据源添加一个属性,以公开信息。或者,某些控件支持
ItemDataBound
事件,您可以在服务器上订阅该事件,并使用该事件更改输出
编辑:
如果您选择订阅ItemDatabound事件(假设您的控件实际具有此功能),您将计算一个递增值并将其分配给要绑定的数据项。然后,您可以将其与模运算结合使用:(计数%2)
为奇偶行应用不同的样式
另一种方法是通过在ASP.NET中使用标记扩展生成一个仅在标记中递增的数字来进行攻击。下面是一个带有中继器的示例:
<asp:Repeater runat='server' id='whatever'>
<HeaderTemplate>
<% int counter = 0; %>
</HeaderTemplate>
<ItemTemplate>
<li class='<%= (counter++) % 2 ? "regularStyle" : "alternateStyle"'>
... content here ...
</li>
</ItemTemplate>
</asp:Repeater>
编辑给你。。。OOPS必须是HtmlTableRow
HtmlTableRow row = e.Item.FindControl("row") as HtmlTableRow;
if (row != null)
row.Attributes.Add("class", ((counter % 2 == 0) ? "odd": "even") );
你也需要这个
<tr id="row" runat="server" ...
EPiServer PageList控件也可以用作数据源,因此没有理由不能使用您最喜欢的ASP.NET模板控件和交替项来呈现它,而只需将数据源ID设置为PageList的ID。不幸的是,EPiServer“隐藏”容器实例的ItemIndex,但解决方法是创建自己的“全局”计数器: 将属性添加到代码隐藏中:
return index % 2 == 0 ? "styleA" : "styleB";
protected Int32 ItemIndex;
然后在您的aspx文件中:
<EPiServer:PageList runat="server">
<HeaderTemplate>
<% this.ItemIndex = 0; %>
</HeaderTemplate>
<ItemTemplate>
<li class="<%# this.ItemIndex++ % 2 == 0 ? "odd" : "even" %>">
Content
</li>
</ItemTemplate>
</EPiServer:PageList>
内容
这对我很有效。(贷记@Rippo)
我刚刚使用了表中的bgcolor
:
bgcolor ='<%#(Container.ItemIndex % 2 == 0) ? "#FFFFFF" : "#FEFFE8" %>'
bgcolor=''
我实现了它,如下所示:
class="<%# Container.ItemIndex % 2 == 0 ? "" : "your-alternate-css-class" %>"
这样做的好处是完全基于用户界面代码(ascx)
或aspx文件),并且不依赖JavaScript
这救了我一天 如果支持的浏览器是IE9+,那么这可以通过纯CSS实现
tr:nth-child(even) {
background-color: #000000;
}
我的容器没有ItemIndex:(这真的很甜蜜和简单。我从来没有想到过。@chris-是的,它很酷,省去了一个替换template@steven-看起来像是onitem databound或JQueryTanks。能帮我朝着正确的方向找到控件吗?我不是.NET高手:(我试图避免使用jQuery来完成这项特定任务。我已经考虑过
OnItemDataBound
。但是我该如何处理计数器?我希望它是这么简单:`CS0103:名称'counter'在当前上下文中不存在`这是不可能的,因为您只有一个类用于该项。没有其他类的方法。谢谢感谢所有优秀的反馈人员。这将在其他情况下对我有所帮助!没错。但是我将无法访问controll-properties中的不同epserver属性,而标准ASP控制器没有这些属性。
tr:nth-child(even) {
background-color: #000000;
}