Коллекция MVC 5 не сопоставлена ​​с моделью - PullRequest
0 голосов
/ 04 октября 2018

Я делал это раньше, но мне пришлось освежить свои знания, когда я не мог заставить их работать.

Я в основном создаю список флажков.Я воспроизвел это руководство: https://exceptionnotfound.net/simple-checkboxlist-in-asp-net-mvc/

Я был совершенно не в состоянии получить предметы из HttpPost и не мог понять, почему.HTML-код выглядел хорошо, имея идентификаторы и имена, как я и ожидал, «Checks_0__IsChecked», «Checks [0] .IsChecked» и т. Д.

Когда все не удается, попробуйте изолировать проблему - поэтому я создал совершенно новое веб-приложениеи скопировал мою модель флажка, мой шаблон редактора и создал идентичный сценарий «создания» - который, к моему удивлению, работал так, как ожидалось .

Просмотр значений формы (Request.Form)содержали одинаковые пары ключ / значение, и модель была сопоставлена ​​правильно.

Есть предложения относительно того, в чем может быть проблема, или как действовать при определении причины?

Шаблон редактора для модели-флажка:

@model CheckBoxViewModel

<div class="form-check">
    @Html.HiddenFor(model => model.Id)
    @Html.HiddenFor(model => model.IsDisabled)
    @if (Model.IsDisabled)
    {
        @Html.CheckBoxFor(model => model.IsChecked, new { @class = "form-check-input", @disabled = "disabled" })
    }
    else
    {
        @Html.CheckBoxFor(model => model.IsChecked, new { @class = "form-check-input" })
    }
    @Html.LabelFor(model => model.IsChecked, Model.Text, new { @class = "form-check-label" })
</div>

Шаблон редактора для модели:

@model ScheduledTriggerViewModel
@Html.EditorFor(model => model.Checks)

Вид:

@model ScheduledTriggerViewModel

@{
    ViewBag.Title = "Create";
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.EditorForModel()
    <button type="submit">Create</button>
}

EDIT Конфигурация маршрута такая же, за исключением дополнительного маршрута (Debug / Logs / {year} / {month}), который размещается первым.Маршрут не выглядит как проблема, поскольку действие получает удар, и другие значения формы отображаются правильно.

Я проверяю значения Request.Form в начале внутри метода действия.Сигнатуры действий одинаковы, за исключением того, что одна async Task<ActionResult>, а другая - просто ActionResult

Форма содержит все флажки с именами, такими как Checks[0].IsChecked и т. Д., С числом до 1.

Ни один из флажков не отключен в HTML.

Я также добавил Autofac в тестовый проект, чтобы проверить, обрабатывает ли он каким-либо образом процесс привязки модели, но это не имеет значения.

ОБНОВЛЕНИЕ Я создал новый контроллер, новую модель и новые шаблоны редактора, которые точно соответствуют оригиналу, за исключением названия модели.

Модель является точной копиейдругая модель.

Этот контроллер / view / editortemplates работает как задумано - но НЕ , как ожидалось, так как я был уверен, что проблема останется.

Я изменил проблемный контроллериспользовать новую модель, и она работала ... я понятия не имею, почему, так как они идентичны.Мне не пришлось ничего менять во взглядах, чтобы выполнить замену.

Поскольку они одинаковы по содержанию, у меня нет представления о том, что может быть причиной этой проблемы.

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