2012-10-11 24 views
9

Quiero poder iniciar algunas funciones de validación basadas en el controlador desde el que se llama una vista ... Estableceré una variable en ViewState o algo así y eso me ayudará a saber qué controlador desde el que se llamó esta vista.Validación Condicional en asp.net MVC4

En otras palabras, quiero que se requiere la validación si se ha establecido una determinada variable ... Así es como yo utilizo para hacer en MVC2 cuando acabo de poner Jquery en mi código ...

HospitalFinNumber: { 
        required: function (element) { 
         debugger; 
         return '@isFlagSet' != 'True'; 
        }, 
        minlength: 6, 
        remote: function() { 
         //debugger; 
         return { 
          url: '@Url.Action("ValidateHosFin", "EditEncounter")', 
          data: { hospitalFin: $('#HospitalFinNumber').val(), encflag: '@encflag' } 
         }; 
        } 
       } 

Ves lo que estoy haciendo allí. Esta validación solo sería necesaria si se establece una determinada variable ... En este caso, la variable es FlagSet ... Yo establecería la longitud mínima y llamaría a una función remota para garantizar que el valor sea único.

No quiero hacer esto en todos los casos.

De todo lo que he leído hasta ahora, no hay una manera clara de lograr esto usando ajax sin obstrucciones? ¿Estoy equivocado, hay alguna manera de que puedas hacer esto? Si no, ¿cómo puedo simplemente colocar la validación de jquery antigua normal en mi código?

Respuesta

11

ASP.NET MVC 3 usa la validación jquery discreta para realizar la validación del lado del cliente. Por lo que podría o bien escribir un atributo de validación custom RequiredIf o utilizar el proporcionado en Mvc Foolproof Validation y luego:

public class MyViewModel 
{ 
    [RequiredIf("IsFlagSet", true)] 
    [Remote("ValidateHosFin", "EditEncounter")] 
    [MinLength(6)] 
    public string HospitalFinNumber { get; set; } 

    public bool IsFlagSet { get; set; } 

    public string EncFlag { get; set; } 
} 

Entonces todo lo que queda es para incluir los jquery.validate.js y jquery.validate.unobtrusive.js guiones o utilizar el paquete correspondiente en ASP.NET MVC 4 que los incluye

+0

Hola Darin. Ha pasado un tiempo desde que tuve noticias tuyas. Pero parece que ese es el camino a seguir. – SoftwareSavant

+0

¡Tengo que añadir aquí, que Foolproof todavía no tiene soporte de Entity Framework! Si se pregunta por qué está recibiendo una "excepción no implementada" en db.SaveChanges(); usted puede sentirse como yo y darse cuenta de que esto aún no está codificado ... ver también: http://foolproof.codeplex.com/workitem/18457 – CodingYourLife

+1

@Darin Dimitrov No está funcionando en MVC 4 bcos que no llamó RequiredIfValidator – CMMaung

3

Otra solución sugerida por Andy West en su blog es condicionalmente eliminar campos de la modelo de estados en el controlador:

Cuando el formulario se ha publicado, quite los campos del modelo de estado para que no sean validados :

if (Request.IsAuthenticated) 
{ 
    ModelState.Remove("CommenterName"); 
    ModelState.Remove("Email"); 
} 

Eso funcionó para mí.

+1

No está mal. Es un par de años tarde, pero lo tomaré. – SoftwareSavant

+1

Eso está muy bien, pero la validación de Javascript sigue activada, lo que impide que se publique el formulario y nunca llega al controlador. En mi situación, si el país en un formulario de registro es "EE. UU.", Entonces valide el Zip como un formato 5 o 5 + 4. Si no es EE. UU., Entonces ignore la validación para ese campo. Parece que sería una funcionalidad común sin una buena solución que se pueda encontrar. además de la validación del lado del controlador con una gran cantidad de javascript que elimina o vuelve a agregar los atributos de los datos de validación, que son poco frecuentes. – stephenbayer

Cuestiones relacionadas