私はモデルを持っています:
public class MyListModel
{
public int ID {get;set;}
public List<User> Users{get;set;}
}
Foreach内でHtml.EditorForメソッドを使用するにはどうすればよいですか?
@model MyListModel
<table>
<tr>
<th></th>
</tr>
@foreach (var item in Model.Users) {
<tr>
<td>
@Html.EditorFor(item.Enabled)
</td>
</tr>
}
</table>
@Html.EditorFor(x=> item.Enabled)
そのようなモデルをサーバーにポストバックすることは、デフォルトではmvcでは機能しないことが何度も指摘されています。ループ内でEditorFor
を使用して適切に編集するには、次のようにfor
を使用する必要があります。
@for(var i = 0; i< Model.Users.Count;i++){
Html.EditorFor(i=>Model.Users[i])
}
@for (var i = 0; i < Model.Users.Count; i++)
{
<tr>
<td>@Html.EditorFor(model => model.Users[i].Enabled)</td>
<td>@Html.EditorFor(model => model.Users[i].FirstName)</td>
<td>@Html.EditorFor(model => model.Users[i].LastName)</td>
</tr>
}
さらに、ユーザーの少なくとも1つのプロパティのいくつかの隠れた変数が必要です。
@for (var i = 0; i < Model.Users.Count; i++)
{
@Html.HiddenFor(model => model.Users[i].FirstName)
}
エレガントと呼ぶものではありませんが、ポストアクションでのバインドに関しては機能します。
foreach
を自分で明示的に使用する他の理由(例は別として)はありますか? _User class
_のカスタムエディター(またはディスプレイ)ヘルパーを作成し、@Html.EditorFor(model=>model.Users)
を作成できます。 Razorは、カスタムヘルパーで各要素を処理するために内部的にforeach
を使用します。
このケースをどのように管理するかについての手がかりがまったくない、質問にアクセスする人のための単なるアイデアです。