0

この関連トピックを見つけましたが、私の質問に答えることができませんでした。

強く型付けされたビューを自動的に作成する場合、たとえばListスキャフォールディングテンプレートを使用すると、大まかに次のようになります。

@model IEnumerable<Test.Models.abc>
<table>
    <tr>
    <th>
        @Html.DisplayNameFor(model => model.ID)
    </th>
</tr>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.ID)
    </td>
</tr>
}
</table>

@Html.DisplayNameFor(model => model.ID)私は完全に理解していますが、そうではありません@Html.DisplayFor(modelItem => item.ID)

目的はmodelItem何ですか?任意のテキストに置き換えると、機能するWebページになります。modelItemは単なる使い捨ての言葉のようです。私の本当の質問は、なぜこれが機能しないのかということだと思います。

@Html.DisplayFor(item => item.ID)

編集

コメントで良い点が指摘されました。modelラムダ式の両側で変更する限り、何にでも変更できるようです。

@Html.DisplayNameFor(abc => abc.ID)

@model副次的な質問は次のとおりです。上部のステートメントは、以下の関数にどのように影響しますか?以前、クラスを介して表示名を理解するために式をmodel参照することを考えていましたが、上記の変更後もページは機能します。@model

4

2 に答える 2

1

itemの外部スコープですでに宣言されているため、機能しませんforeach

@foreach (var item in Model)

modelItemラムダが使用されない理由は、の反復によるものですIEnumerableTest.Models.abcの代わりにモデルとして存在する場合IEnumerable、そのラムダは重要であり、のコードはDisplayForに変更され@Html.DisplayFor(m => m.ItemId)ます。

アップデート

@model IEnumerable<Test.Models.abc>このビューが強く型付けされていることを宣言するだけIEnumerable<Test.Models.abc>です。あなたの場合は-の型です。つまり、ビュープロパティthis.Model(ではないmodel)はタイプIEnumerable<Test.Models.abc>であり、そのタイプのモデルをこのビューに渡す必要があります。model上記の例では、単なる式変数です-それはその式のためだけのスコープを持っています。その名前を、外部スコープでまだ使用されていない保護されていない有効な変数名に変更できます(そのため、ビューで既に宣言されているプロパティModelが非表示になるため、名前を付けないでください)。Model

于 2013-01-09T20:29:49.863 に答える
0

itemはすでに外部スコープで定義されている変数です。あなたはそれをクロージャーとして捉えていますが、これはここでは理想的ではありません。あなたのコードが読むべきものは次のとおりです。

@Html.DisplayFor(modelItem => modelItem.ID)
于 2013-01-09T20:30:25.717 に答える