2010-08-25 3 views
4

public class {userModel [Obligatoire (ErrorMessage = "Le nom est Requis.")] [UIHint ("String")] [DataType (DataType .Text)] [DisplayName ("Nom")] public string Nom de famille {get; ensemble; }Comment puis-je valider un modèle complexe en utilisant ASP.NET MVC 2

 [DataType(DataType.Text)] 
     [UIHint("String")] 
     [DisplayName("Prénom")] 
     public string Firstname { get; set; } 

     [Required(ErrorMessage="La spécialité principale est requise.")] 
     [DisplayName("Spécialité principale")] 
     public Speciality PrimarySpeciality { get; set; } 

     [DisplayName("Spécialité secondaire")] 
     public Speciality SecondarySpeciality { get; set; } 
} 

public class SpecialityModel 
{ 
    [Required(ErrorMessage = "La spécialité est requise.")] 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

Comment la spécialité principale peut-elle être requise et non la seconde? Il semble que l'attribut Required ne vérifie que nullable mais Specialty n'est jamais nul.

Edit:

Après avoir lu ce post http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html je suis reformulant ma question: Comment puis-je empêcher la validation sous des propriétés se produire avant que l'objet principal. Comme vous pouvez le voir, SecondarySpeciality n'est pas requis, mais obtient toujours la cause validée de DataAnnotation dans la classe Address. Je pense que mvc2 ne peut pas fonctionner avec la validation du modèle. Dois-je aller avec un modèle uni? (ce qui signifie beaucoup plus de correspondance mais si c'est le travail ...)

Répondre

0

Ecrivez votre propre validateur dans lequel vous pouvez utiliser la méthode Enum.IsDefined pour déterminer si la valeur de Spécialité est correctement définie.

Vous avez juste besoin de créer la classe RequiredEnumAttribute qui dérivera de ValidationAttribute et remplacera la méthode IsValid. L'exemple est disponible here.

1

Pour effectuer une validation sur des objets complexes, vous devez implémenter une validation personnalisée en créant votre propre attribut de validation. Je taperais un exemple rapide, mais Phil Haack a un grand article sur ce sujet à:

http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

+0

Il semble que le problème est plus sur la façon dont la validation est INTERVENUES. Voir http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html – mateo

Questions connexes