Наиболее вероятная причина - привязка к свойству AllowOrder
с помощью помощника HiddenFor
перед использованием <input type="checkbox" />
, который будет генерировать элементы ввода в следующем порядке:
<input name="AllowOrder" type="hidden" ... />
<input type="checkbox" id="allowOrder" name="AllowOrder" value="true" ... />
Поскольку есть 2 входных элемента с одинаковым значением атрибута name
, только первый элемент <input>
будет привязан к свойству viewmodel, которое содержит значение true
в вашем случае. Вместо того, чтобы создавать флажок вручную с тегом <input>
и скрытым полем по отдельности, вы должны использовать атрибут @Html.CheckBoxFor()
helper и переключать атрибут checked
с помощью вспомогательной функции ниже или использовать троичный оператор:
public object SetChecked(bool value)
{
if (value)
{
return new { id = "allowOrder", @checked = "checked" };
}
else
{
return new { id = "allowOrder" };
}
}
Checkbox
@* alternative 1 *@
@Html.CheckBoxFor(model => model.AllowOrder, @(SetChecked(Model.AllowOrder)))
@* alternative 2 *@
@Html.CheckBoxFor(model => model.AllowOrder, new { id = "allowOrder", @checked = @(Model.AllowOrder ? "checked" : "") })
Примечание: checked
является ключевым словом C #, поэтому его необходимо экранировать с помощью @
, чтобы установить его как атрибут HTML для визуализированного <input type="checkbox" />
.