Флажок ASP.NET Core Tag Helper не сохраняет непроверенное значение - PullRequest
0 голосов
/ 24 мая 2018

Я добавляю флажок в форму MVC с помощью Tag Helpers:

<div class="form-group">
    <label asp-for="@Model.Billable"></label>
    <input asp-for="@Model.Billable" type="checkbox" />
    <input asp-for="@Model.Billable" type="hidden" />
</div>

Когда пользователь изменяет значение на Checked с Unchecked, значение формы, возвращаемое обратно в контроллер, имеет значение True - идеально.

Однако, если значение флажка начинается как Проверено, и пользователь изменяет его на Не проверено, значение формы, переданное обратно в контроллер, все еще имеет значение Истина ???

1 Ответ

0 голосов
/ 24 мая 2018

Когда типом является checkbox, вспомогательный тег ввода создает скрытый элемент для флажка для вас с тем же name.Если вы проверите источник просмотра страницы, вы увидите, что

<input name="Billable" type="hidden" value="false">

Когда пользователь включит / установит флажок и отправит форму, он отправит 2 элемента данных формы, один для фактического флажка сзначение True и второе для скрытого ввода со значением False.

Если вы проверяете сетевой трафик (Chrome devtools-> network), вы можете увидеть это

Billable: true
Billable: false

Когда связыватель модели использует эти данные, он будет иметь приоритет перед значением Trueи сопоставьте это с вашим логическим свойством.

Когда пользователь снимает флажок и отправляет форму, он отправит только один элемент данных формы, только один для скрытого элемента ввода со значением false, и связыватель модели установит значение false для вашего логического значенияproeprty вашего параметра метода действия.

Ваш текущий код генерирует элемент checkbox и дополнительный скрытый элемент ввода с тем же именем Billable.Таким образом, в основном он будет отображать 2 элемента ввода (1 флажок, 1 скрытый элемент, который создал помощник, и 1, который вы явно создали).Когда пользователь снимает флажок, он отправит True для вашего явно созданного и false для того, который создан помощником тега.

Если вы проверяете сетевой трафик (Chrome devtools-> network),Вы можете видеть это

Billable: True
Billable: false

Связыватель модели будет использовать эту информацию и сопоставлять значение True с вашим свойством Billable вашей модели представления.

Решение состоит в том, чтобы удалить дополнительный скрытый элемент.и полагаться на тот, созданный помощником тега.

<div class="form-group">
    <label asp-for="@Model.Billable"></label>
    <input asp-for="@Model.Billable" type="checkbox" />
</div>
...