2012-05-04 13 views
1

私はIEnumerable<User>のビューを持っており、すべてのユーザーに対して、ページの下部に保存ボタンを備えたエディタをポンピングします。投稿アクションはIEnumerable<User>ですが、なんらかの理由でこの値は常にnullです。私はそれは、単一のエンティティとだけで正常に動作として保存する方法が働く知っASP.NET MVC3を使用して複数のエンティティを保存する

public ActionResult ViewUsers() 
     { 
      IEnumerable<User> users = userService.GetUsers(); 
      return View(users.ToList()); 
     } 

     [HttpPost] 
     public ActionResult ViewUsers(List<User> users) 
     { 
       foreach (User u in users) 
       { 
        userService.Save(u); 
       } 
      return RedirectToAction("ViewUsers"); 
     } 

:ここ

は(短縮)

@model IEnumerable<User> 
    @using (Html.BeginForm("ViewUsers", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
     foreach (var item in Model) { 
      <tr> 
       <td> 
        @Html.DisplayFor(modelItem => item.Username) 
       </td> 
       <td> 
        @Html.EditorFor(modelItem => item.IsAdmin) 
       </td> 
       <td> 
        @Html.EditorFor(modelItem => item.GoldCoins) 
       </td> 
      </tr> 
     } 
     <tr><td><input type="submit" value="Save"/></td></tr> 
    } 

私の行動私の見解です。 'users'がnullのため、ループにエラーがスローされます。あなたはこの例のようにエディタのHTMLヘルパーを使用する必要があります

+0

モデルバインダーは、エディターの使用方法とhtmlヘルパーの表示方法のためにコレクションを送信していることを認識しません。 –

答えて

0

@model List<User> 
@using (Html.BeginForm("ViewUsers", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @for (int i = 0; i < Model.Count; i++) { 
     @Html.DisplayFor(m => m[i].Username) 
     @:Is Admin: @Html.EditorFor(m => m[i].IsAdmin) 
     @:Gold Coins: @Html.EditorFor(m => m[i].GoldCoins) 
    } 
    <input type="submit" value="Save"/> 
} 

注:私は読んで、それを簡単にするために、テーブルタグを取り除か。要点は、コレクションにバインドするには、あるコンベンションに従うためにフォームに送信された名前/値の名前部分がサーバーに戻ってくる必要があるということです。 EditorFor(m => m [i] .IsAdmin)コードは、名前をMVCモデルのバインダーが期待する正しい名前にします。

+0

しかし、私はユーザー名でユーザーを識別する能力を失うので、このシステムを使用している人は、誰が編集しているのか分からないでしょう。 – Johannes

+0

なぜですか?個々のユーザー名は引き続き表示されます。 –

関連する問題