2011-03-06 47 views
7

Tengo un cuestionario muy grande de más de 60 preguntas que el usuario puede comenzar a completar, guardar en cualquier momento y dejarlo en espera. El formulario se puede volver a cargar desde la base de datos y completar en cualquier momento y luego cerrarlo.Validación parcial de ASP.NET MVC 3 Modelos

tengo el siguiente modelo:

public class Questionnaire{ 

    [Required] 
    public string Question1 { get; set; } 

    [Required] 
    [Range(1, 10)] 
    public int Quesiton2 { get; set; } 

    public string Question3 {get;set} 
} 

necesito para validar parcialmente mi modelo cuando el usuario decide guardar el formulario y realizar una validación completa, incluyendo la validación de los campos requeridos cuando el usuario escogió para cerrar la forma.

¿cuál es la mejor manera de implementarlo?

Respuesta

2

No es totalmente claro por su pregunta/ejemplo exactamente lo que necesita, pero en general he descubierto que dividir mis Modelos de Vista en MVC es la mejor manera de abordar este tipo de cosas.

es decir dividir su entidad en partes, cada una de las cuales se puede validar por sí misma.

A continuación, utilice vistas parciales/plantillas de editor personalizadas para proporcionar los componentes de la interfaz de usuario para cada uno de estos.

Luego puede combinar estos componentes en un formulario cuando sea necesario o proporcionar formularios por separado en la misma página, asistentes de varias páginas o asistentes AJAX progresivos de una sola página, o lo que desee) según sea necesario.

Mantiene las cosas SECAS y simples.

clave es no tenga miedo de agregar la capa extra de Visualización de modelos cuando sea necesario, para llevar sus objetos de datos en línea con los requisitos de la interfaz de usuario.

No se vea limitado por sus objetos/entidades comerciales cuando necesite estar libre de ellos específicamente: es bastante fácil volver a juntar las partes de un objeto comercial del componente Ver modelo piezas.

0

Puede tener dos Acciones separadas Guardar() y Enviar() y deshabilitar la validación (o hacer una validación mínima) en Guardar().

+0

Eso es lo que tenía en mente, en la acción Guardar() usaría ModelState.IsValid, pero ¿cómo debería implementar la validación de la acción Submit()? Quiero que todos los atributos [Obligatorios] se validen en campos no vacíos – Marc

1

¿Por qué usa la Pregunta 1 ...? Pregunta ... 1 objeto por pregunta, ¿qué sucede si agrega una nueva pregunta? ... debe tener una Lista de preguntas y validarla manualmente antes de guardarla de acuerdo con las reglas de su negocio.

0

Siguiendo con la idea de Bala R, lo mejor sería realizar una validación condicional en función de qué acción está realizando, guardando o enviando. Con esto quiero decir, al guardar, solo validar los datos en los campos, así que verifique nulls/vacties/defaults y no valide esos campos, pero valide los campos de acuerdo con la lógica comercial/reglas modelo para aquellos que han sido ingresó.

Por lo tanto, supongamos que tiene un formulario con nombre, edad y sexo, en el intento 1, el usuario rellena su nombre como '1234', envejece como '12' y deja 'sexo' en blanco, cuando guarda, usted Es necesario pasar por cada control y validar aquellos que tienen valores, en este caso, nombre y edad, luego puede validar el nombre e informar que '1234' no es un nombre válido, pero acepta la edad como 12.

Probablemente sería mejor colocar este lado del servidor como si tratara de validar este lado del cliente, sería difícil diferenciar entre un campo requerido que se ha dejado en blanco, con la intención de completarlo más tarde, y uno que había quedado en blanco, punto y aparte. (Podría argumentar que necesitaría una función de validación Save() y Submit() del lado del cliente para solucionar este y el lado del servidor).

Cuestiones relacionadas