Вы используете перегрузку EditorFor()
, где вторым параметром является additionalViewData
. Если у вас не было определенного EditorTemplate
для bool?
, метод сгенерирует шаблон по умолчанию, который будет <select>
с 3 значениями для null
, true
и false
, и включит атрибуты.
Но поскольку у вас есть EditorTemplate
, вам нужно добавить атрибуты самостоятельно, считав значение из ViewDataDictionary
(обычно EditorTemplate
включает в себя несколько элементов html, поэтому метод не может знать, какой элемент вы хотите применить атрибуты к).
Ваш шаблон должен быть
@model bool?
@{ var attributes = ViewData["htmlAttributes"]; }
@Html.CheckBox("", Model.GetValueOrDefault(), attributes)
Сказав это, вы не должны этого делать. A bool?
имеет 3 состояния (null
, true
или false
), но флажок имеет только 2 состояния - включено или выключено (переводится в true
или false
), поэтому ваш EditorTemplate
не представляет возможные значения вашей собственности.
Если вы хотите разрешить только true
или false
, то ваша собственность не должна обнуляться. В качестве альтернативы используйте шаблон по умолчанию, который допускает выбор null
(или, если вам нужен альтернативный интерфейс, создайте шаблон, который отображает, например, 3 переключателя)
Кроме того, я рекомендую вам прекратить загрязнять разметку поведением и использовать Ненавязчивый JavaScript - т.е. ваш сценарий будет
$(yourCheckBox).click(function() {
... // do something
});