Я только что заметил, что Html.CheckBox("foo")
генерирует 2 входа вместо одного, кто-нибудь знает, почему это так?
<input id="foo" name="foo" type="checkbox" value="true" />
<input name="foo" type="hidden" value="false" />
asp.net-mvc
Ома
источник
источник
Ответы:
Если флажок не установлен, поле формы не отправляется. Вот почему всегда есть ложное значение в скрытом поле. Если вы оставите флажок не установленным, форма все равно будет иметь значение из скрытого поля. Именно так ASP.NET MVC обрабатывает значения флажков.
Если вы хотите это подтвердить, поставьте флажок в форме не с Html.Hidden, а с
<input type="checkbox" name="MyTestCheckboxValue"></input>
. Оставьте флажок снятым, отправьте форму и посмотрите значения отправленных запросов на стороне сервера. Вы увидите, что значение флажка отсутствует. Если у вас есть скрытое поле, оно будет содержатьMyTestCheckboxValue
запись соfalse
значением.источник
IsActive
, которое инициируетсяtrue
в конструкторе. Пользователь снимает флажок, но поскольку значение не отправляется на сервер, связыватель модели не получает его, и значение свойства не изменяется. Связыватель модели не должен предполагать, что если значение не отправлено, для него установлено значение false, поскольку это может быть вашим решением не отправлять это значение.false
значение, даже если они проверены, и это сбивает с толку. Отключенные флажки вообще не должны отправлять какие-либо значения, если ASP.NET хочет быть совместимым с поведением HTTP по умолчанию.Вы можете написать помощник для предотвращения добавления скрытого ввода:
используй это:
источник
@using Your.Name.Space
в начало вашего файла просмотра .cshtml бритвы.System.Web.Mvc.Html
чтобы оно было доступно для всех представленийкогда флажок установлен и отправлен, выполните это
обращаться
источник
Ручной подход заключается в следующем:
источник
Это строго типизированная версия решения Александра Трофимова:
источник
Используйте Contains, он будет работать с двумя возможными значениями публикации: «false» или «true, false».
источник
Скрытый ввод вызывал проблемы со стилизованными флажками. Поэтому я создал Html Helper Extension для размещения скрытого ввода вне div, содержащего CheckBox.
результат
источник
Это не ошибка! Это добавляет возможность иметь всегда значение после отправки формы на сервер. Если вы хотите иметь дело с полями ввода флажков с помощью jQuery, используйте метод prop (передайте свойство 'checked' в качестве параметра). Пример:
$('#id').prop('checked')
источник
Вы можете попробовать инициализировать конструктор вашей Модели следующим образом:
и по вашему мнению:
источник
Я обнаружил, что это действительно вызывало проблемы, когда у меня была WebGrid. Сортировка ссылок в WebGrid превратится на удвоенную строку запроса или x = true & x = false в x = true, false и вызовет ошибку разбора в флажке для.
В итоге я использовал jQuery для удаления скрытых полей на стороне клиента:
источник