¿Debo renderizar secciones opcionales de un formulario a través de parciales?

Como ejercicio de aprendizaje de .NET, estoy moviendo algunos formularios simples a MVC y me he encontrado con un problema. El formulario en cuestión es un formulario de varias partes que tiene secciones de opciones. Por ejemplo, la Sección 0 es estática y contiene información como nombre de usuario, nombre real, dirección de correo electrónico. Después de eso, hay un botón de opción con varias opciones. Si hace clic en la primera radio, muestra la Sección 1. Si elige la segunda, muestra la Sección 2, y así sucesivamente.

En WebForms esto no fue gran cosa, ya que acabo de validar en la devolución de datos y dije si Radio1.Selected validar esto, si Radio2.Selected validar eso, etc. Así que ahora tengo una vista fuertemente tipada con miembros [Requeridos], que obviamente no va a funcionar; no puedo exigir miembros que no siempre serán necesarios.

Dicho esto, ¿es este el enfoque correcto para el problema?

  • Cree los miembros que pertenecen a la Sección 0 en mi clase de modelo de vista fuertemente tipada.
  • Cree referencias a la clase fuertemente tipada de cada parcial en mi clase de modelo de vista.
  • Cree las vistas parciales y luego renderícelas en la vista principal.
  • Dependiendo del botón de opción seleccionado, renderice la vista parcial apropiada.
  • Valide el modelo como de costumbre ... que, con suerte, se convertirá en cascada a los modelos parciales.

¿Tiene esto sentido o el enfoque es incorrecto?

preguntado el 16 de mayo de 11 a las 16:05

1 Respuestas

Ese es un escenario típico en el que necesita validación condicional, es decir, si se establece algún valor, valide que se requiere otro valor. Lograr esto con anotaciones de datos estáticos que son atributos simples horneados en el momento de la compilación puede convertirse rápidamente en una pesadilla debido a su naturaleza declarativa. Bueno, siempre puede lanzar sus propios atributos de validación personalizados, pero el problema con los atributos es que tendrá que especificar los nombres de las propiedades como cadenas, ya que deben conocerse en el momento de la compilación.

Esa es una de las razones por las que uso FluentValidation.NET. No solo que las reglas de validación están separadas de los modelos de vista y que se integra muy bien con ASP.NET MVC pero manejar escenarios como este sería muy fácil. Podría tener un modelo de subvista que contenga todas las propiedades de la subsección y luego incluirlo condicionalmente en función del valor de una propiedad determinada en el modelo de vista principal dentro de su validador.

contestado el 16 de mayo de 11 a las 20:05

"pero el problema con los atributos es que tendrá que especificar los nombres de las propiedades como cadenas, ya que deben conocerse en el momento de la compilación". Eso no es cierto. Siempre puedes lanzar e ir desde allí. - John Farrell

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.