这是最新的mvc 5.2
这里是几年前从一个被遗忘的博客使用的代码的助手
public static void SeriesSplitter<T>(this System.Web.Mvc.HtmlHelper htmlHelper, IEnumerable<T> items,
int itemsBeforeSplit, Action<T> template, Action seriesSplitter)
{
if (items == null)
return;
if (items.Count() == 0)
return;
var i = 0;
foreach (var item in items)
{
if (i != 0 && i % itemsBeforeSplit == 0)
seriesSplitter();
template(item);
i++;
}
}
我像这样使用它
<table class="public-photo" >
<tr class="public-photo">
<% Html.SeriesSplitter(Model.Photos, 6, item => { %>
<td class="public-photo">
<a href="/Anon/DisplayPublicPhoto/?filename=<%=item.PublicFileName%>" class="public-photo" >
<%if(Model.HighRes == true){%>
<img src="/t2/<%=item.PublicFileName%>" id="<%=item.PublicFileName%>" class="public-photo" alt="thumbnail" width="140" height="105" />
<%}
else
{%>
<img src="/t/<%=item.PublicFileName%>" id="<%=item.PublicFileName%>" class="public-photo" alt="thumbnail" width="140" height="105" />
<% } %>
</a>
<a href="#" class="ReportPhoto" id="<%=item.PhotoID%>">Report this</a>
</td>
<%}, () => { %>
</tr>
<tr>
<% }); %>
</tr>
</table>
在aspx中没有问题,但是razor似乎在动作参数的最后部分窒息,其中html代码与代码交织在一起。对于剃刀我将其转换为正确的语法 编辑剃刀代码
<table class="public-photo">
<tr class="public-photo">
@Html.SeriesSplitter(Model.Photos, 6, icetem =>
{
@<td class="public-photo">
<a href="/Anon/DisplayPublicPhoto/?filename=@icetem.PublicFileName " class="public-photo">
@if (Model.HighRes == true)
{
<img src="/t2/@icetem.PublicFileName" id="@icetem.PublicFileName" class="public-photo" alt="thumbnail" width="140" height="105" />
}
else
{
<img src="/t/@icetem.PublicFileName" id="@icetem.PublicFileName" class="public-photo" alt="thumbnail" width="140" height="105" />
}
</a>
<a href="#" class="ReportPhoto" id="@icetem.PhotoID">Report this</a>
</td>;
},
() => {
//</tr>
// <tr>
});
</tr>
</table>
错误是CS0201:只能将赋值,调用,递增,递减,等待和新对象表达式用作语句
答案 0 :(得分:0)
使用@item.PublicFileName
而非<%=item.PublicFileName%>
并使用@:
或<text></text>
呈现html标记
答案 1 :(得分:0)
所有HTML帮助器方法都用于生成UI,因此它应该始终返回String.your Helper方法不返回任何内容。请查看MSDN.
中的以下文章