我有一些像这样的剃刀代码。
@{
Layout = null;
var Nav = ViewData["Nav"] as List<string>;
}
@{
if(Nav!=null){
Nav.ForEach(item =>
{
@<a>123@(item)</a>
});
}
}
但我正在接受这些方面。错误是:
>'/'应用程序中的服务器错误。 编译错误 描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并适当修改源代码。Compiler Error Message: CS1002: ; expected
Source Error:
Line 8: {
Line 9: @<a>123@(item)</a>
Line 10: });
Line 11: }
Line 12: }
如果我用foreach块替换ForEach方法,它运行良好。
foreach (var item in Nav)
{
<a>@item</a>
}
但我不喜欢foreach,它看起来很难看 如何使用foreach块的ForEach方法实例?
答案 0 :(得分:2)
@if (Nav != null)
{
Nav.ForEach(x =>
{
Func<object, HelperResult> res = @<a>123@(item)</a>;
Write(res(x));
});
}
您确定这看起来比以下更具可读性吗?
foreach (var item in Nav)
{
<a>123@(item)</a>
}
作为替代方案,您可以使用Razor Delegated helpers。
答案 1 :(得分:1)
这是一篇关于在Razor中使用模板化lambda的好文章:http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx
有几个问题。首先,您需要表明您正在lamda中编写HTML,因此您必须在Write
上明确调用WriteTo
或HelperResult
。此外,由于lambda中的{ }
表示一个块,您需要用分号结束所有行。
尝试使用像Haacked的List
扩展名
public static class RazorExtensions {
public static HelperResult List<T>(this IEnumerable<T> items,
Func<T, HelperResult> template) {
return new HelperResult(writer => {
foreach (var item in items) {
template(item).WriteTo(writer);
}
});
}
}
答案 2 :(得分:0)
我认为这是因为你在同一行上放了两个@符号试试
if(Nav!=null){
Nav.ForEach(item =>
{
<a>123
@(item)
</a>
});
}
跳这有帮助。