以下は、MVC3/Razor ビュー ファイルからのコード スニペットを簡略化したものです。
@foreach (var item in Model.Stuff.Items){
<tr>
<td>@item.Title</td>
</tr>
<tr>
<td>
@using (Html.BeginForm()) {
@item.Title
@Html.HiddenFor(item => item.Title)
}
</td>
</tr>
} @* End of Items foreach loop *@
タイトルは最初の行に表示されます。フォーム内にも表示されます。HiddenFor
しかし、エラーCS0136でそれを使用しようとすると、「アイテム」という名前のローカル変数は、「親または現在/子」ですでに使用されている「アイテム」に別の意味を与えるため、このスコープで宣言できません。他の何かを示すスコープ
なぜそうなるのかわかりません。最初のitem => item.Title
「アイテム」の は、事実上、無名関数の単なるパラメーター名ですよね?
それを次のように変更すると:@Html.HiddenFor(s => s.Title)
エラー CS1963 が発生します。式ツリーには動的操作が含まれていない可能性があります。
背景: 意図は、Model.Stuff.Items のエントリごとに 2 つのテーブル行を持つことです。最初の行は現在の情報を静的 HTML として提供し、2 つ目はその編集フォームを提供します。(javascript を使用すると、いつでもどちらか一方が非表示になります。) フォームは、このコントローラーの別のアクションに送信されます。すべてのフォームが同じ URL に送信されます。非表示の値は、どの行が更新されているかを識別します。