我最近将我的网站从ASP.NET MVC3(Razor)升级到MVC4(Razor2),并且在这样做时发现了Razor视图引擎中的一个重大变化。
场景(大大简化)如下所示。
@model IEnumerable<string>
@{ Layout = null; }
<!DOCTYPE html>
<html>
<body>
<div>
@foreach (var x in Model)
{
@string.Format("Foo bar: {0}", x) // Errors in MVC4/Razor2
}
</div>
</body>
</html>
这在MVC3 / Razor中工作正常,但在MVC4 / Razor2中,string.Format
行导致错误:
“@”字符后面的意外“string”关键字。进入代码后,您不需要使用“@”作为“string”的结构前缀。
如果删除@
,则视图引擎会要求您以分号终止string.Format
行。然而,ReSharper然后警告(正确地):
不使用纯方法的返回值。
我发现的两个修复方法是使用<text>
:
<text>@string.Format("The value {0}", x)</text>
或者使用@:@
更好奇的方法:
@:@string.Format("The value {0}", x)
这是Razor视图引擎中已知且有记录的变更吗?
答案 0 :(得分:16)
好像是一个错误。它适用于String
:
@foreach (var x in Model)
{
@String.Format("Foo bar: {0}", x)
}
答案 1 :(得分:5)
这确实是我们决定不修复的错误,请注意语法不正确,因为在这种情况下C#和标记之间没有转换。
我知道resharper在这里显示警告,但我认为警告是错误的。