Html.CheckBox возвращает false, если отключено, даже если выбрано - PullRequest
27 голосов
/ 18 января 2011

Надеюсь, простой вопрос для вас asp.net mvc gurus:

У меня есть флажок, созданный так:

<%=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?Означает ли семантически отключенное состояние ложное?

Ответы [ 4 ]

33 голосов
/ 18 января 2011

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

2 голосов
/ 13 февраля 2019

Я не знаю, решит ли это вашу проблему, но это решение для меня:

Моя модель имеет логическое свойство UserMigrated, после того как пользователь настроен на миграцию, он не может вернуться,таким образом, вид становится:

@if (Model.UserMigrated)
    {
    <td>@Html.CheckBox("chkBoxReadOnly", true, new {disabled = "disabled"})</td>
        @Html.HiddenFor(m => m.UserMigrated)
    }
else
    {
    <td>@Html.CheckBoxFor(m => m.UserMigrated)</td>
    }
2 голосов
/ 06 ноября 2013

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

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

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

0 голосов
/ 19 сентября 2018

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

Я также удостоверился, что Html.HiddenFor был там, поэтому значение было сохранено.

...