15

最近、自分のWebサイトを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は次のように警告します(当然そうです)。

純粋メソッドの戻り値は使用されません。

これについて私が見つけた2つの修正は、次のいずれかを使用すること<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

これは確かに修正しないことにしたバグです。この場合、C#とマークアップの間に遷移がないため、構文が正しくないことに注意してください。

ここでresharperが警告を表示することは理解していますが、警告は間違っていると思います。

これが将来の参照のためのバグです https://aspnetwebstack.codeplex.com/workitem/458

于 2013-10-14T17:14:27.320 に答える