最近、私のWebサイトをASP.NET MVC3(Razor)からMVC4(Razor2)にアップグレードしました。 Razorビューエンジン"@:@"で修正できるMVC4 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>
これは誤差でstring.Format
ライン結果がMVC4/Razor2で、MVC3 /カミソリで正常に動作します:
は、 "@" 文字の後に予期しない "文字列" のキーワード。コードの中に入れば、 "string"のような構造体の前に "@"を付ける必要はありません。
@
を削除すると、ビューエンジンはstring.Format
行をセミコロンで終了することを要求します。しかし、ReSharperは次のように警告します。(正しく):
純粋な方法の戻り値は使用されません。
私はこのために見つけた2つの修正が<text>
を使用するか、次のとおりです。
<text>@string.Format("The value {0}", x)</text>
または@:@
を使用して、より好奇心のアプローチ:
@:@string.Format("The value {0}", x)
が、これは知られており、文書の変更ですRazorビューエンジンでは?
警告が間違っている、と彼らに報告したり抑制しなければなりません。 デザイン時および実行時に生成されたC#コードには違いがあります。ランタイムC#はstring.formatを別のメソッド呼び出しでラップするため、完全に有効です。 Resharperはこのクラスのエラーを無視しなければなりません。 –