В моем приложении ASP.NET MVC я визуализирую флажок, используя следующий код:
<%= Html.CheckBoxFor(i=>i.ReceiveRSVPNotifications) %>
Теперь я вижу, что это отображает как тег ввода флажка, так и скрытый тег ввода. Проблема, с которой я сталкиваюсь, - это когда я пытаюсь получить значение из флажка с помощью FormCollection:
FormValues["ReceiveRSVPNotifications"]
Я получаю значение «истина, ложь». Глядя на визуализированный HTML-код, я вижу следующее:
<input id="ReceiveRSVPNotifications" name="ReceiveRSVPNotifications" value="true" type="checkbox">
<input name="ReceiveRSVPNotifications" value="false" type="hidden">
Таким образом, кажется, что коллекция FormValues объединяет эти два значения, поскольку они имеют одинаковое имя.
Любые идеи?
источник
<input>
тег.false
. Посмотрите на ответ RyanJMcGowan ниже: «Отправка скрытого ввода позволяет узнать, что флажок присутствовал на странице, когда был отправлен запрос».У меня была та же проблема, что и у Шона (см. Выше). Этот подход может быть отличным для POST, но действительно отстой для GET. Поэтому я реализовал простое расширение Html, которое просто выводит скрытое поле.
Проблема в том, что я не хочу, чтобы изменение инфраструктуры MVC нарушило мой код. Поэтому я должен убедиться, что у меня есть тестовое покрытие, объясняющее этот новый контракт.
источник
Я использую этот альтернативный метод для отображения флажков для форм GET:
Он похож на метод Криса Кемпа , который работает нормально, за исключением того, что в нем не используются лежащие в основе
CheckBoxFor
иRegex.Replace
. Он основан на источнике исходногоHtml.CheckBoxFor
метода.источник
Вот исходный код для дополнительного входного тега. Microsoft любезно предоставила комментарии, которые именно по этому поводу.
источник
Я думаю, что самое простое решение - визуализировать элемент INPUT напрямую следующим образом:
В синтаксисе Razor это еще проще, потому что атрибут «checked» напрямую отображается со значением «checked», когда ему задано «истинное» значение на стороне сервера.
источник