2012-05-04 3 views
1

У меня есть представление, которое принимает IEnumerable<User> и для каждого пользователя он выкачивает редактор с кнопкой сохранения в нижней части страницы. В моем посту действует IEnumerable<User>, но по какой-то причине это значение всегда равно нулю.Сохранение нескольких объектов с использованием 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"); 
     } 

Я знаю, что сохранить метод работает, как она работает с отдельными лицами просто отлично. Он выдает ошибку в цикле, потому что «пользователи» имеют значение 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

Почему? Имена отдельных пользователей будут отображаться. –

Смежные вопросы