web-dev-qa-db-ja.com

foreach内でEditorForを使用する方法

私はモデルを持っています:

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>
37
Jeremy
@Html.EditorFor(x=> item.Enabled)

そのようなモデルをサーバーにポストバックすることは、デフォルトではmvcでは機能しないことが何度も指摘されています。ループ内でEditorForを使用して適切に編集するには、次のようにforを使用する必要があります。

 @for(var i = 0; i< Model.Users.Count;i++){
      Html.EditorFor(i=>Model.Users[i])
 }
63
Alexander Taran
@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)
}

エレガントと呼ぶものではありませんが、ポストアクションでのバインドに関しては機能します。

12
Jamie

foreachを自分で明示的に使用する他の理由(例は別として)はありますか? _User class_のカスタムエディター(またはディスプレイ)ヘルパーを作成し、@Html.EditorFor(model=>model.Users)を作成できます。 Razorは、カスタムヘルパーで各要素を処理するために内部的にforeachを使用します。

このケースをどのように管理するかについての手がかりがまったくない、質問にアクセスする人のための単なるアイデアです。

1