Когда типом является 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>