可以使用“@:@”修复MVC4 Razor中可能发生的突变

时间:2013-03-21 09:37:42

标签: asp.net-mvc-3 razor asp.net-mvc-4 razor-2

我最近将我的网站从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视图引擎中已知且有记录的变更吗?

2 个答案:

答案 0 :(得分:16)

好像是一个错误。它适用于String

@foreach (var x in Model)
{
    @String.Format("Foo bar: {0}", x)
}

答案 1 :(得分:5)

这确实是我们决定不修复的错误,请注意语法不正确,因为在这种情况下C#和标记之间没有转换。

我知道resharper在这里显示警告,但我认为警告是错误的。

以下是未来参考的错误 https://aspnetwebstack.codeplex.com/workitem/458