2010-10-27 11 views
1

Je suis un petit morceau dans MVC.I've un modèle:ASP.NET MVC ModelState IsValid - Comment exclure des propriétés spécifiques de la validation?

public class Usuarios 
    { 

    [Required(ErrorMessage = "**TxtOPID is required")] 
     public string TxtOpID 
     { 
      get { return this.txt_opId; } 
      set { this.txt_opId = value; } 
     } 

    [Required(ErrorMessage="**Password is required")] 
     public string TxtPassword 
     { 
      get { return this.txt_password; } 
      set { this.txt_password = value; } 
     } 

     [Required(ErrorMessage="**Email is required")] 
     [RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$",ErrorMessage="**Invalid email")] 
     public string TxtEmail 
     { 
      get { return this.txt_email; } 
      set { this.txt_email = value; } 
     } 
} 

Ceci est DataAnnotations et fonctionne très bien lorsque je tente de vérifier si toutes les propriétés sont valides avec ModelState.IsValid propriétée. Le problème est quand je ne veux pas vérifier toutes les propriétés.i.e: Si je veux vérifier seulement TxtOPID et TxtSenha propriété, comme dans un formulaire de connexion, où seulement OPID et mot de passe sont nécessaires.

Comment puis-je exclure la validation de la propriété Email dans une action spécifique dans un contrôleur?

J'ai essayé:

public ActionResult SignIn([Bind(Exclude="TxtEmail")]Usuarios usuario) 
    { 
    [...] 
    } 

Mais il ne fonctionne pas, la cause toujours VALIDE, TxtEmail n'est pas nécessaire pour cette forme spécifique.

Un idéias?

Répondre

3

Ne mettez pas toute votre validation dans une seule classe. Construire une classe pour Login, et un autre pour Contact, etc

Fondamentalement chaque modèle aura DataAnnotations pour valider ce modèle .. même si vous avez 30 ceux différents. Vous pouvez toujours créer une classe de base et y mettre des propriétés communes et en hériter simplement.

Dans ma situation, j'ai un formulaire de connexion et la classe (en utilisant DataAnnotations) valide "UserName" et "Password". J'ai aussi un formulaire «Événements» qui nécessite le nom de l'événement, la date, l'heure, etc. J'ai donc une autre classe pour valider les événements.

+0

mais, ces classes vont-elles répéter leurs propriétés? – ozsenegal

+0

oui, ils peuvent ... par exemple. vous pouvez utiliser "email" dans 3 endroits différents. un pour un formulaire de contact, un pour un formulaire de connexion, un pour un gravatar. Vous devez créer 3 modèles (login, email, gravatar) et valider la propriété email sur chacun des modèles. –

+0

ils peuvent, mais ce n'est pas recommandé dans OOP – ozsenegal