Подтвердить что ты не робот

Html.CheckBox возвращает false, если отключен, даже если он отключен

Надеюсь, вам будет легко задаться вопрос о гуру asp.net mvc:

У меня есть флажок, созданный следующим образом:

<%=Html.CheckBox("MyCheckBox", true, new { disabled = "disabled"})%>

В моем действии я проверяю значение следующим образом:

bool isChecked = form["MyCheckBox"].Contains("true");

Я ожидаю, что это вернет true, поскольку оно проверено. Однако созданный скрытый элемент имеет ложное значение:

<input checked="checked" disabled="disabled" id="MyCheckBox" name="MyCheckBox" type="checkbox" value="true" />
<input name="MyCheckBox" type="hidden" value="false" />

Во-первых, есть ли способ заставить HtmlHelper вести себя так, как я ожидаю? Или вручную создайте входной/создающий мой собственный вспомогательный метод единственным способом? (не то, что это большое дело...)

Во-вторых, может ли кто-нибудь пролить свет на то, почему эти флажки ведут себя так? Я неверно, если отключить флажок, который отмечен галочкой, должен == true? Имеет ли отключенное состояние семантически значение false?

4b9b3361

Ответ 1

Поле ввода, помеченное атрибутом disabled="disabled" НИКОГДА, отправляет свое значение серверу. Если вы хотите этого достичь, вы можете использовать атрибут readonly="readonly", который по-прежнему запрещает пользователю изменять значение, но отправляет существующее значение при отправке формы.

Ответ 2

1) С моей точки зрения, нет способа изменить поведение метода Html.CheckBox. Мне пришлось столкнуться с проблемой, и я закончил тем, что вручную установил флажок ввода, как вы предлагаете. Построить флажок ввода не всегда ад, поскольку использование вспомогательных методов не всегда является приоритетом. Разумеется, выбор вашего собственного вспомогательного метода может быть правильным выбором.

2) Отключенное поле ввода не публикуется при отправке формы; я ожидал бы того же самого, подавая запрещенные входные флажки, независимо от того, отмечены ли они или нет.

Мы можем спорить о выборе, который MVC принял для ретрансляции на вводе скрытого поля для нажатия на запрос флажка, когда флажок не выбран. побочный эффект этого выбора заключается в том, что мы найдем имя флажка среди опубликованных данных, даже если этот флажок отключен в несогласии с тем, что было указано выше: это поле отключено: не указано, когда форма представленный