4

私は、問題なく動作する次のコード行を持つ MVC3 プロジェクトを持っています。

@if (this.Model.ShowAddButton)
{ 
    @this.Html.ActionLink("Add", "Add")
}

私たちのチームには、すべてのローカル メソッド呼び出しに接頭辞 を付ける必要があるというコーディング ガイドラインがありますthis。これは、今まで MVC3 で問題なく機能していました。

hereのガイダンスを使用して、プロジェクトを MVC4 に手動でアップグレードしました。上記のコードは、次のメッセージでエラーになります。

Unexpected "this" keyword after "@" character.  Once inside code, you do not need to prefix constructs like "this" with "@".

エラーメッセージは誤解を招くと思います。これは、これを行うことが合法であることを意味しますが、必須ではありません。コーディング ガイドラインを遵守する必要がないことはわかっていますが、意図的にこれを行っています。パーサーが失敗したという事実、メッセージは、ネストされたコードブロックでOnce inside code, you cannot prefix.... 使用できないことを理解していることを示しているはずであり、問​​題は記号ではなく. ステートメントに追加しても呼び出しの結果には影響しないため、例外がスローされる理由がわかりません。削除することで問題を解決できます:@@thisthisthis

@if (this.Model.ShowAddButton)
{ 
    @Html.ActionLink("Add", "Add")
}

ただし、これを行うと、コーディング ガイドラインに抵触します。私の質問は、これは MVC4 で意図的に変更されたものですか (MVC3 では問題なく機能したため)。それとも、これは MVC4 のバグですか? ifブロックを解除しても、thisキーワードは引き続き使用できます。

@this.Html.ActionLink("Add", "Add")
4

1 に答える 1

4

これは実際にはMVC4のバグです。報告が提出されました。

2つの回避策は次のとおりです。

@if (this.Model.ShowAddButton)
{ 
    @Html.ActionLink("Add", "Add")
}

また

@if (this.Model.ShowAddButton)
{ 
    @(this.Html.ActionLink("Add", "Add"))
}
于 2012-09-28T12:55:05.837 に答える