我想转换流行的asp.net MVC 2.0 solr.net示例应用程序代码剃刀语法。 我无法理解的最后一行...请帮助
<% Html.Repeat(new[] { 5, 10, 20 }, ps => { %>
<% if (ps == Model.Search.PageSize) { %>
<span><%= ps%></span>
<% } else { %>
<a href="@Url.SetParameters(new {pagesize = ps, page = 1})">@ps</a>
<% } %>
<% }, () => { %> | <% }); %>
[更新] 来源为Html.Repeat扩展
HtmlHelperRepeatExtensions.cs
对于这个工作,你将不得不修改Html.Repeat
扩展方法利用的模板化剃刀代表由菲尔哈克所示。 然后:
@{Html.Repeat(
new[] { 5, 10, 20 },
@<text>
@if (item == Model.Search.PageSize)
{
<span>@item</span>
}
else
{
<a href="@Url.SetParameters(new { pagesize = item, page = 1 })">
@item
</a>
}
</text>,
@<text>|</text>
);}
更新:
根据更新后的问题,你似乎可以用自定义的HTML帮助,但正如我在我的答案,你需要更新这个辅助使用模板化的剃刀代表语法说明,如果你想要的工作。 这里有一个例子,说明它可能看起来:
public static class HtmlHelperRepeatExtensions
{
public static void Repeat<T>(
this HtmlHelper html,
IEnumerable<T> items,
Func<T, HelperResult> render,
Func<dynamic, HelperResult> separator
)
{
bool first = true;
foreach (var item in items)
{
if (first)
{
first = false;
}
else
{
separator(item).WriteTo(html.ViewContext.Writer);
}
render(item).WriteTo(html.ViewContext.Writer);
}
}
}
或者,如果你想有辅助方法直接返回HelperResult,这样你就不需要调用它时使用了括号:
public static class HtmlHelperRepeatExtensions
{
public static HelperResult Repeat<T>(
this HtmlHelper html,
IEnumerable<T> items,
Func<T, HelperResult> render,
Func<dynamic, HelperResult> separator
)
{
return new HelperResult(writer =>
{
bool first = true;
foreach (var item in items)
{
if (first)
first = false;
else
separator(item).WriteTo(writer);
render(item).WriteTo(writer);
}
});
}
}
然后您的视图中:
@Html.Repeat(
new[] { 5, 10, 20 },
@<text>
@if (item == Model.Search.PageSize)
{
<span>@item</span>
}
else
{
<a href="@Url.SetParameters(new { pagesize = item, page = 1 })">
@item
</a>
}
</text>,
@<text>|</text>
)
也许是这样的:
}, () => { <text>|</text> });