15

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

4

2 回答 2

16

似乎是一个错误。它适用于String

@foreach (var x in Model)
{
    @String.Format("Foo bar: {0}", x)
}
于 2013-03-21T09:53:44.517 回答
5

This is indeed a bug we decided not to fix, note that the syntax is incorrect as there is no transition between C# and markup in this case.

I understand that resharper shows a warning here but I believe the warning is wrong.

Here is the bug for future reference https://aspnetwebstack.codeplex.com/workitem/458

于 2013-10-14T17:14:27.320 回答