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

Ric*_*ett 15 razor asp.net-mvc-3 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>
Run Code Online (Sandbox Code Playgroud)

这在MVC3/Razor中工作正常,但是在MVC4/Razor2中,该string.Format行会导致以下错误:

"@"字符后面的意外"字符串"关键字.进入代码后,您不需要使用"@"作为"string"之类的结构前缀.

如果删除@,则视图引擎会要求您string.Format使用分号终止该行.然而,ReSharper然后警告(正确地):

不使用纯方法的返回值.

我发现的两个修复是要么使用<text>:

<text>@string.Format("The value {0}", x)</text>
Run Code Online (Sandbox Code Playgroud)

或者使用以下更好奇的方法@:@:

@:@string.Format("The value {0}", x)
Run Code Online (Sandbox Code Playgroud)

这是Razor视图引擎中已知且有记录的变化吗?

pol*_*ios 16

好像是一个bug.它适用于String:

@foreach (var x in Model)
{
    @String.Format("Foo bar: {0}", x)
}
Run Code Online (Sandbox Code Playgroud)


Yis*_*zer 5

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

我知道resharper在这里显示警告,但我相信警告是错误的.

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