Pregunta

Quiero crear una modelbinder costumbre que valida el modelo acotada. He encontrado varios ejemplos de esto y funciona como debería. Pero quiero también ser capaz de enviar la parte posterior del usuario a la página de vino de si hay errores en el modelo.

Es esto posible hacerlo y si existen efectos secundarios obvios al hacer esto?

Lo que quiero lograr es que el controlador siempre se sale con comandos válidos, por lo que no necesito para comprobar si hay model.IsValid () en el método de acción.

¿Fue útil?

Solución

Lo que se intenta hacer se ve bien, pero no funcionará. Hay demasiadas restricciones.

  1. Por lo general, sólo el controlador puede decidir dónde redirigir en caso de error. Puede utilizar atributos adicionales como [OnError ( "Acción")], pero esto parece soluciones.
  2. Formulario de no publicar todos de datos. Por ejemplo, desplegable listas, los valores auxiliares tienen que ser llenado por el controlador. Probablemente se puede utilizar filtros de acción para esto, pero esto es una vez más se parece a un corte.

Puede configurar el filtro de acción global (en el controlador de base) que va a comprobar si hay errores en el modelo (que ajusta los aglomerantes) y redirección (configuración .Result). Pero esto es complicado y requiere demasiado extra "código" - atributos, etc., que luego es difícil de rastrear y relacionarse con la lógica de aplicación real. Y se convierte pronto demasiado restrictiva (véase la ley de la abstracción con fugas), cuando no tiene por qué sólo simple nombre de la acción de redirección de error, etc.

Este aspecto más más sencillo cuando se hace de esta manera:

public ActionResult PostAction(ViewModel data)
{
   if (!ModelState.IsValid)
      return View("GetAction", data.WithDropDownList(repository.GetProducts()));

}

En el ejemplo anterior, el controlador tiene el control sobre el flujo de trabajo, tal como debe ser. También tiene la libertad para realizar la verificación / configuración adicional. Todavía se puede utilizar tanto la infraestructura como sea posible - enlazadores de modelos para proporcionar errores ModelState, etc -. Pero solo controlador debe tener la decisión final sobre la entrada y salida

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