在MVC4剃刀可能的重大更改是可以固定“@:@”(Possible breaking change

2019-07-22 07:49发布

我最近升级从ASP.NET MVC3(剃刀),以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 /剃刀正常,但是在MVC4 / Razor2中string.Format线导致的错误:

之后“@”字符意外“串”的关键字。 一旦里面的代码,你不需要前缀结构,如“串”和“@”。

如果去掉@ ,视图引擎,然后要求你终止string.Format用分号线。 然而,然后ReSharper的警告(确实如此):

不使用纯方法的返回值。

这两个补丁,我发现这是要么使用<text>

<text>@string.Format("The value {0}", x)</text>

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

@:@string.Format("The value {0}", x)

这是Razor视图引擎已知和记录的变化?

Answer 1:

似乎是一个错误。 它的工作原理与String

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


Answer 2:

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

据我所知,ReSharper的显示一个警告这里,但我认为该警告是错误的。

这里是供将来参考的bug https://aspnetwebstack.codeplex.com/workitem/458



文章来源: Possible breaking change in MVC4 Razor that can be fixed with “@:@”