【发布时间】:2013-03-21 09:37:41
【问题描述】:
我最近将我的网站从 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.Format 行。然而,ReSharper 然后警告(正确):
没有使用纯方法的返回值。
我为此找到的两个修复方法是使用<text>:
<text>@string.Format("The value {0}", x)</text>
或者使用@:@的更奇特的方法:
@:@string.Format("The value {0}", x)
这是 Razor 视图引擎中已知且记录在案的更改吗?
【问题讨论】:
-
在这种情况下来自 resharper 的警告是不正确的,应该向他们报告或禁止。在设计时和运行时生成的 C# 代码之间存在差异,运行时 c# 将使用另一个方法调用包装 string.format,因此它是完全有效的。 Resharper 应该忽略这类错误(你也可以)
标签: asp.net-mvc-3 razor asp.net-mvc-4 razor-2