Acabo de notar que Html.CheckBox("foo")
genera 2 entradas en lugar de una, ¿alguien sabe por qué es así?
<input id="foo" name="foo" type="checkbox" value="true" />
<input name="foo" type="hidden" value="false" />
asp.net-mvc
Omu
fuente
fuente
Respuestas:
Si la casilla de verificación no está seleccionada, el campo del formulario no se envía. Es por eso que siempre hay un valor falso en el campo oculto. Si deja la casilla de verificación sin marcar, el formulario seguirá teniendo valor del campo oculto. Así es como ASP.NET MVC maneja los valores de las casillas de verificación.
Si desea confirmar eso, coloque una casilla de verificación en el formulario no con Html.Hidden, sino con
<input type="checkbox" name="MyTestCheckboxValue"></input>
. Deje la casilla sin marcar, envíe el formulario y observe los valores de solicitud publicados en el lado del servidor. Verá que no hay un valor de casilla de verificación. Si tuviera un campo oculto, contendría unaMyTestCheckboxValue
entrada confalse
valor.fuente
IsActive
, que se iniciatrue
en constructor. El usuario deselecciona la casilla de verificación, pero dado que el valor no se envía al servidor, el cuaderno de modelo no lo recoge y el valor de la propiedad no cambia. El cuaderno de modelo no debe suponer que si el valor no se envía, se estableció en falso, ya que podría ser su decisión no enviar este valor.false
valor incluso si están marcadas, y eso es confuso. Las casillas de verificación deshabilitadas no deberían enviar ningún valor, si ASP.NET quiere ser compatible con el comportamiento HTTP predeterminado.Puede escribir un ayudante para evitar agregar la entrada oculta:
úsalo:
fuente
@using Your.Name.Space
en la parte superior de su archivo de vista de afeitadora .cshtml.System.Web.Mvc.Html
de nombres para que sea accesible en todas las vistascuando la casilla de verificación está marcada y enviada, realice esto
Referir
fuente
El enfoque manual es este:
fuente
Esta es la versión fuertemente tipada de la solución de Alexander Trofimov:
fuente
Use Contains, funcionará con los dos valores de publicación posibles: "falso" o "verdadero, falso".
fuente
La entrada oculta estaba causando problemas con las casillas de estilo. Así que creé una extensión de ayuda HTML para colocar la entrada oculta fuera del div que contiene CheckBox.
Resultado
fuente
¡Esto no es un error! Agrega la posibilidad de tener siempre un valor, después de publicar el formulario en el servidor. Si desea lidiar con los campos de entrada de la casilla de verificación con jQuery, use el método prop (pase la propiedad 'marcada' como parámetro). Ejemplo:
$('#id').prop('checked')
fuente
Puede intentar inicializar el constructor de su modelo así:
y en tu opinión:
fuente
Descubrí que esto realmente causaba problemas cuando tenía un WebGrid. Los enlaces de clasificación en WebGrid pasarían por la cadena de consulta duplicada o x = true & x = false en x = true, false y causarían un error de análisis en la casilla de verificación.
Terminé usando jQuery para eliminar los campos ocultos en el lado del cliente:
fuente