Я делал это раньше, но мне пришлось освежить свои знания, когда я не мог заставить их работать.
Я в основном создаю список флажков.Я воспроизвел это руководство: 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 работает как задумано - но НЕ , как ожидалось, так как я был уверен, что проблема останется.
Я изменил проблемный контроллериспользовать новую модель, и она работала ... я понятия не имею, почему, так как они идентичны.Мне не пришлось ничего менять во взглядах, чтобы выполнить замену.
Поскольку они одинаковы по содержанию, у меня нет представления о том, что может быть причиной этой проблемы.