2012-08-16 11 views
9

Estoy incorporando WebAPI en mi desarrollo y estoy publicando todas las presentaciones de formularios en un controlador WebAPI. Me di cuenta de que las casillas de verificación no están vinculadas al modelo correctamente. Tengo un formulario usando:¿WebAPI de ASP.Net MVC 4 no vincula las casillas de verificación correctamente?

@Html.CheckBoxFor(m => m.HasVideo) 

Produce una casilla de verificación y un elemento de formulario oculto. Cuando marque la casilla de verificación (lo que significa un valor "verdadero"), el enlace del modelo en mi publicación de WebAPI refleja un valor falso para la propiedad HasVideo. Moví todo el método a un controlador mvc tradicional, y el enlace funciona como se esperaba.

¿Hay una solución para esto, o hay algo que me falta?

+0

Ver este post, la solución tenía que ver con la eliminación de datos de vista. Quizás este es el mismo problema. http://stackoverflow.com/questions/11993424/asp-net-mvc3-checkboxform-m-go-is-unchecked-even-though-my-model-go-is-t –

+4

El problema en la publicación SO vinculada fue que el OP no sabía cómo se unen los helpers html para los controles de entrada. Al usar Html helpers para los controles de entrada, tienen un orden, si un modelo se envía a una vista luego de un error, los ayudantes siempre renderizarán los datos originales publicados en lugar de los datos que el modelo pueda contener. Esto es intencional para preservar la entrada en un envío fallido. Es por eso que limpiar el modelo-estado resolvió el problema. Sin embargo, este problema no suena igual ya que el enlace está bien en un controlador normal pero no en un controlador WebAPI. – Nope

+0

¿Es correcto el valor de su casilla de verificación en Request.Form en el servidor? –

Respuesta

7

literatura no toman este código HTML helper:

@Html.CheckBoxFor(m => m.HasVideo) 

prueba este lugar:

<input id="HasVideo" name="HasVideo" type="checkbox" value="true" @(((Model!=null) && Model.HasVideo) ? "checked=\"checked\"" : "") /> 
+3

Esto funciona ... pero ¿por qué?!? –

+0

Tuve un problema similar y cuando revisé, es bcos del atributo - value = "true", se está publicando en el controlador. Si elimina el atributo de valor, siempre se mostrará como falso en la acción del controlador. –

0

Visto este problema antes y es generalmente la interferencia ViewData/ViewBag que es una pesadilla para depurar por lo general.

Puede agregar un ViewBag.Clear/ViewData.Clear en la función que le está dando un problema.

Cheers, J

Cuestiones relacionadas