2012-05-04 2 views
1

나는보기가 IEnumerable<User>이며, 모든 사용자에 대해 페이지 아래쪽에 저장 버튼이있는 편집기가 펌프됩니다. 나의 게시물 작업은 IEnumerable<User>이지만 어떤 이유로이 값은 항상 null입니다.ASP.NET MVC3을 사용하여 여러 엔티티 저장

여기 (단축) 내이다

@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> 
    } 

내 조치 :

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"); 
     } 

내가 그것을 잘 단일 엔티티로 작동하기 때문에이 방법은 작동 저장 알고있다. 'users'가 null이기 때문에 루프에 오류가 발생합니다.

+0

모델 바인더는 편집기를 사용하고 HTML 도우미를 표시하는 방법 때문에 컬렉션을 보내고 있다는 것을 모릅니다. –

답변

0

당신이 예처럼 편집기 HTML 헬퍼를 사용해야합니다 :

@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

왜? 개별 사용자 이름은 계속 표시됩니다. –

관련 문제