2012-08-23 11 views
5

Sabemos que en MVC, un CheckBoxFor generará una checkbox con un value="true" y una hidden con un value=false. Ambos controles de entrada compartirán el mismo nombre.Cómo serializar la casilla de verificación en un formulario de datos JSON en

Es muy razonable porque el formulario podrá POSTAR un valor falso si la casilla está desmarcada. Y la carpeta de modelo ignorará la entrada oculta cuando la casilla de verificación devuelva un valor verdadero.

Pero ahora he anulado el evento de envío de formularios para enviar los datos del formulario a un controlador WebAPI en formato JSON.

Al serializar los datos del formulario, no hay ningún mecanismo para analizar correctamente la relación entre la casilla de verificación y la casilla de verificación. Por lo tanto, cuando no se selecciona, devuelve un false, lo cual está bien. Pero cuando está marcada, devuelve un {true, false} en lugar de true, porque la función serializeArray() pasa por cada input y encuentra que dos valores tienen el mismo nombre.

La pregunta es: ¿Cuál es la mejor manera de corregirlo?

+0

posible duplicado de [ASP.Net MVC 4's WebAPI no vincula casillas de verificación correctamente?] (Http://stackoverflow.com/questions/11996285/asp-net-mvc-4s-webapi-does-not-bind- casillas de verificación correctamente) –

Respuesta

1

Mi solución a este problema fue escribir mi propio método HtmlHelper que representa una sola etiqueta de entrada < type = "checkbox"/>. Cualquier otra solución simplemente parecía demasiado hacky.

Puede usar dotPeek o .NET Reflector para ver cómo el equipo de Microsoft creó el método HtmlHelper.CheckboxFor si necesita alguna ayuda para realizar esa tarea.

El enfoque de 2 etiquetas se tomó para evitar que los parámetros de acción MVC emitan una excepción cuando un parámetro "bool" no tiene un parámetro coincidente enviado al controlador (una casilla no marcada no envía ningún valor).

Cuestiones relacionadas