MVC3: Пакетное редактирование посещаемости и передача модели в действие обзора - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть представление Index.cshtml:

@model AttendenceModel
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("VisOppsummering", "Attendences", new { AttendenceModel = Model }, FormMethod.Post))
{
    @Html.DisplayFor(m => m.ClassName)
    @Html.EditorFor(m => m.Attendences)
    <button type="submit">Next</button>
}

и шаблон редактора Attendence.cshtml:

@model Attendence

@Html.DisplayFor(m => m.Student.Name)
@Html.RadioButtonFor(m => m.Attended, true, new { id = "attendence" })

Учителя могут пометить всех учащихся, которые посещали школу, а затем передать измененную модель в действие «Просмотр», где они могут проверить всех посещенных и не посещаемых учащихся и отправить. Я хочу использовать лучшие практики MVC для этого. AttendenceModel имеет несколько свойств и общий список Attendences, который является List.

Я пытался следовать без успеха. Модель пуста .:

[HttpPost]
public ActionResult Review(AttendenceModel model)
{
   if (TryUpdateModel(model))
   {
      return View(model);
   }
}

1 Ответ

0 голосов
/ 09 ноября 2011

Следующий аргумент для вашего BeginForm помощника не имеет смысла:

new { AttendenceModel = Model }

вы не можете передавать сложные объекты, подобные этому.Только простые скалярные значения.Вы можете использовать скрытые поля в форме для всех свойств, которые нельзя редактировать, и видимые поля ввода для других.Или еще лучше: используйте модель представления, которая будет содержать только свойства, которые можно редактировать в форме, и дополнительный идентификатор, который позволит вам извлечь исходную модель из базы данных, а при использовании метода TryUpdateModel обновите только те свойства, которые быличасть запроса POST:

[HttpPost]
public ActionResult Review(int id)
{
    var model = Repository.GetModel(id);
    if (TryUpdateModel(model))
    {
        return View(model);
    }
    ...
}

, насколько это касается представления, оно станет:

@model AttendenceViewModel
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("Review", "SomeControllerName"))
{
    @Html.HiddenForm(x => x.Id)
    @Html.DisplayFor(m => m.ClassName)
    @Html.EditorFor(m => m.Attendences)
    <button type="submit">Next</button>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...