Html.CheckBoxFor не проверяется, даже если значение модели истинно

У меня есть частичный вид Razor, поддерживаемый viewmodel, содержащий, среди прочего, bool под названием UseDuo. Скажем, свойство UseDuo является истинным, и я ввел в свой Razor следующий код:

@Html.CheckBox("UseDuo", Model.UseDuo) @* Not checked *@
@Html.CheckBoxFor(m => m.UseDuo) @* Not checked *@
@Html.CheckBox("UseDuo2", Model.UseDuo) @* checked *@
@(Model.UseDuo ? "UseDuo=true" : "UseDuo=false") @* outputs UseDuo=true *@

Первые два флажка выходят не отмеченными, но третий проверяется, а последняя строка выводится как "UseDuo = true". Что дает? Согласно моему пониманию этих помощников Html, все три флажка должны быть проверены. Но кажется, что если имя моего флажка соответствует имени моего свойства модели, оно отказывается проверяться должным образом.

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

Редактировать: Просто не было никакого реального вопроса. Мой вопрос: Почему не проверяются первые две коробки?

Ответ 1

Если @Html.CheckBoxFor(m => m.UseDuo) отображает флажок без проверки, и вы подтвердили, что Model.UseDuo = true, то единственной возможной причиной является то, что в файле модели уже есть значение UseDuo, которое конфликтует с вашей моделью. Чтобы убедиться в этом, попробуйте удалить его перед возвратом вида:

ModelState.Remove("UseDuo");

Или полностью очистить модельное состояние:

ModelState.Clear();

Теперь помощник CheckBox выберет значение из вашей модели. Если флажок установлен, вам нужно будет найти, в какой части вашего кода значение UseDuo было вставлено в модельное состояние.