En mi aplicación ASP.NET MVC, estoy representando una casilla de verificación con el siguiente código:
<%= Html.CheckBoxFor(i=>i.ReceiveRSVPNotifications) %>
Ahora, veo que esto hace que tanto la etiqueta de entrada casilla de verificación y una etiqueta de entrada oculta. El problema que tengo es cuando intento recuperar el valor de la casilla de verificación usando FormCollection:
FormValues["ReceiveRSVPNotifications"]
Me sale el valor "verdadero, falso". Al mirar el HTML renderizado, puedo ver lo siguiente:
<input id="ReceiveRSVPNotifications" name="ReceiveRSVPNotifications" value="true" type="checkbox">
<input name="ReceiveRSVPNotifications" value="false" type="hidden">
Entonces, la colección FormValues parece unir estos dos valores ya que tienen el mismo nombre.
¿Algunas ideas?
fuente
<input>
etiqueta?false
. Mire la respuesta de RyanJMcGowan a continuación: "Enviar una entrada oculta hace posible saber que la casilla de verificación estaba presente en la página cuando se envió la solicitud".Tuve el mismo problema que Shawn (arriba). Este enfoque puede ser excelente para POST, pero realmente apesta para GET. Por lo tanto, implementé una extensión Html simple que simplemente elimina el campo oculto.
El problema que tengo ahora es que no quiero un cambio en el marco MVC para romper mi código. Así que debo asegurarme de tener una cobertura de prueba que explique este nuevo contrato.
fuente
Utilizo este método alternativo para representar las casillas de verificación de los formularios GET:
Es similar al método de Chris Kemp , que funciona bien, excepto que este no utiliza el subyacente
CheckBoxFor
yRegex.Replace
. Se basa en la fuente delHtml.CheckBoxFor
método original .fuente
Aquí está el código fuente de la etiqueta de entrada adicional. Microsoft tuvo la amabilidad de incluir comentarios que abordan esto con precisión.
fuente
Creo que la solución más simple es representar el elemento INPUT directamente de la siguiente manera:
En la sintaxis de Razor es aún más fácil, porque el atributo 'verificado' se representa directamente con un valor "verificado" cuando se le da un valor 'verdadero' del lado del servidor.
fuente