Все значения в сложном параметре в пост-действии равны нулю - PullRequest
0 голосов
/ 15 декабря 2018

Это простое приложение MVC, которое читает и пишет в файл Excel.Функциональность может быть упрощена в этих трех шагах.

  1. Прочитать список пациентов, забронированных на прием, и показать их пользователю.
  2. Разрешить пользователю проверять, кто пришел.
  3. Обновлять Excel с обновленным вводом.
Приложение хорошо читает с листа Excel и показывает все записи в представлении, как показано ниже.Однако при отправке параметр в действии post (которым должна быть модель, переданная из представления) получает 14 строк, но показывает нулевые значения для всех свойств в модели.Надеюсь, что скриншоты и код ниже помогут понять эту проблему.Спасибо за любую помощь / обратную связь Excel выглядит следующим образом enter image description here

MVC Вид показывает, как показано ниже enter image description here

Модель

public class Appointments
{
    public string Facility { get; set; }
    public string MRNumber { get; set; }
    public string GroupTopic { get; set; }
    public string LOC { get; set; }
    public bool CheckedIn { get; set; }
}

Просмотр модели

public class AppointmentsViewModel
{
    public List<Appointments> appointments { get; set; }
}

Индекс HttpGet передает объект модели представления, который показывает 14 строк

public ActionResult Index()
{
   AppointmentsViewModel vm = new AppointmentsViewModel();

   //Some code is which populates vm with data from Excel        

   return View(vm);
}

Индекс HttpPost Действие получает виртуальную машину со списком из 14 объектов встреч, но все свойства показывают ноль

[HttpPost]
public ActionResult Index(AppointmentsViewModel vm)
{
  //Breakpoint
  //Some code to update Excel file
}

Я помещаюточка останова на "Break Point" выше, посмотрел, что передается в VM, и он показывает все 14 строк, но с нулевыми свойствами enter image description here

В моемВо-первых, я убедился, что я использую цикл for вместо foreach, и что я использую @ Html.DisplayFor для каждого свойства в модели.Также моя модель объявлена ​​как@model Scheduling_Demo.Models.AppointmentsViewModelCode для просмотра ниже

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{

    <table class="table" style="align-content:center">
        @*<tr>
            <th>
                @Html.LabelFor(model => model.appointments.FirstOrDefault().Facility)
            </th>
            <th>
                @Html.LabelFor(model => model.appointments.FirstOrDefault().MRNumber)
            </th>
            <th>
                @Html.LabelFor(model => model.appointments.FirstOrDefault().GroupTopic)
            </th>*@
        @*<th>
                @Html.LabelFor(model => model.appointments.FirstOrDefault().Date)
            </th>*@
        @*<th>
                    @Html.LabelFor(model => model.appointments.FirstOrDefault().LOC)
                </th>
                <th>
                    @Html.LabelFor(model => model.appointments.FirstOrDefault().CheckedIn)
                </th>
            </tr>*@

        @for (int t = 0; t < Model.appointments.Count; t++)
        {
            <tr>
                <td>
                    @Html.DisplayFor(model => Model.appointments[t].Facility)
                </td>
                <td>
                    @Html.DisplayFor(model => Model.appointments[t].MRNumber)
                </td>
                <td>
                    @Html.DisplayFor(model => Model.appointments[t].GroupTopic)
                </td>
                @*<td>
                        @Html.DisplayFor(model => Model.appointments[t].Date)
                    </td>*@
                <td>
                    @Html.DisplayFor(model => Model.appointments[t].LOC)
                </td>
                <td>
                    @Html.CheckBoxFor(model => Model.appointments[t].CheckedIn)
                </td>
            </tr>
        }
    </table>
    <input type="submit" name="Submit" value="Submit" class="btn btn-info btn-sm" />
}

1 Ответ

0 голосов
/ 15 декабря 2018

Исходя из комментариев выше, поскольку единственное значение, которое успешно передается, - это значение @ Html.CheckboxFor, я искал, почему @ Html.DisplayFor не связывал модель с действием post.Пост, указанный ниже, отвечает на мой вопрос.Спасибо всем.Надеюсь, что это может помочь кому-то еще. MVC4 Razor - @ Html.Display для без привязки к модели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...