Mig*_*ura 5 c# asp.net-mvc razor
我正在使用IEnumerable扩展来遍历集合并获取其索引:
@Model.ForEach((card, i) => {
@<li class="c@(i)">@card.Text</li>;
})
Run Code Online (Sandbox Code Playgroud)
ForEach扩展如下:
public static void ForEach<T>(this IEnumerable<T> source, Action<T, Int32> action) {
Int32 i = 0;
foreach (T item in source) {
action(item, i);
i++;
}
} // ForEach
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译它时,我收到以下错误消息:
参数1:无法从'void'转换为'System.Web.WebPages.HelperResult'
我怎么解决这个问题?我需要新的扩展吗?
你的问题是Razor希望你的ForEach方法返回一个值,比如MvcHtmlString.
此外,您不能简单地期望Razor将foreach子句的主体翻译为与您的Action委托一起使用.有一种方法可以使它工作,但它不是那么漂亮.@for(...)如果你想使用标准的剃刀语法,我建议使用James提出的条款.
但是,这是一个有效的实现:
public static MvcHtmlString ForEach<T>(this IEnumerable<T> source, Func<T, Int32, string> selector)
{
return new MvcHtmlString(String.Join("\n", source.Select(selector)));
}
Run Code Online (Sandbox Code Playgroud)
用法:
@Model.ForEach((card, i) =>
{
return "<li class=c" + i + ">" + card.Text + "</li>";
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |