Pregunta

En primer lugar un poco de contexto

Tengo un formulario, en el que después de vuelta algunos de los objetos que se materializan en objetos de forma automática por los AT incorporada ModelBinder:

<input type="hidden" name="myobj[0].Id" />
<input type="text" name="myobj[0].Hours" />
<input type="hidden" name="myobj[1].Id" />
<input type="text" name="myobj[1].Hours" />

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(IList<MyObject> myobj);

Además: Me gustaría hacer hincapié en que hay demasiados temas que DTO (DataTransferObjects) que más abajo en el mapa de líneas en entidades marco entidad, por lo que sería más bien no le gusta el cambio nada en el DTO excepto atributos tal vez añadiendo

Problema:

Si un usuario introduce un valor no válido para "Horas", decir 'Fubar', entonces el ModelBinder naturalmente no intentará establecer el 'horas de autonomía-propiedad. Sin embargo, el valor predeterminado es 0, ya que es un int y no con un cadena .

Esto provoca cierta dificultad para mí por supuesto, porque ahora no puedo ver si el usuario realmente entró en 0, o si esto fue causado por una entrada no válida.

Desde que estoy usando un mapeador liados a mano entre el objeto y entidad (Entity Framework), que no podemos cambiar la huella de la 'horas de autonomía-propiedad a int? . Soy consciente de que algunos MVC ha construido en la validación, pero prefiero no poner en práctica ya que sabemos que ha sido atacada violentamente y que hay alguna nueva validación viene en ASP.NET MVC 2.0.

Solución?

Tengo que ser capaz de señalar al usuario qué campo es incorrecta, por lo que significa de alguna manera necesitan ser capaces de capturar una excepción (o posiblemente alguna otra solución ingeniosa?), Donde puedo hacer un poco de lógica y post copias de una nueva visión para el usuario, donde aclaro lo que hicieron mal.

Mi idea actual:. Escribir un ModelBinder personalizada

¿Qué sugieres?

¿Fue útil?

Solución

  

Esto provoca cierta dificultad para mí por supuesto, porque ahora no puedo ver si el usuario realmente entró en 0, o si esto fue causado por una entrada no válida.

Sí se puede. Mira en el ModelState.

Otros consejos

Si bien esto no es particularmente ideal, he dicho que no quiere cambiar nada más. Así que la opción que usted ha mencionado, la creación de un ModelBinder costumbre no tendrán ningún problema. Sin embargo, es posible que se encuentre la creación de un ModelBinder para cada entidad que desea enlazar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top