2010-10-12 5 views
1

J'ai une classe, un employé, dans laquelle l'utilisateur saisit des valeurs pour les propriétés sur un écran, et encore plus sur un autre écran. Le problème que j'ai avec ceci est comment valider ces propriétés? Si je mets des attributs de validation pour les propriétés de la classe, j'ai un problème. La validation a lieu si le champ est affiché sur le formulaire ou non. Donc, pour ma classe d'employés, j'ai dû commenter une partie de la validation afin de la faire fonctionner sur un écran. Ça ne marchera probablement pas de l'autre. classe privée scellée Métadonnées { [HiddenInput (DisplayValue = false)] public int EmployeeId {get; ensemble; }Comment configurer la validation d'une classe sur 2 écrans?

 [DisplayName("Forename")] 
     [DataType(DataType.Text)] 
     [Required(ErrorMessage = "Forename is required")] 
     public string Forename { get; set; } 

     [DisplayName("Surname")] 
     [DataType(DataType.Text)] 
     [Required(ErrorMessage = "Surname is required")] 
     public string Surname { get; set; } 

     [DisplayName("Middle Names")] 
     [DataType(DataType.Text)] 
     public string Middlenames { get; set; } 

     //[DisplayName("User Name")] 
     //[DataType(DataType.Text)] 
     //[Required(ErrorMessage = "User name is required")] 
     //public string UserName { get; set; } 

     [DisplayName("Employee Number")] 
     [DataType(DataType.Text)] 
     [Required(ErrorMessage = "EmployeeNumber is required")] 
     public string EmployeeNumber { get; set; } 

     [DisplayName("Department")] 
     [UIHint("DropDownList")] 
     [Required(ErrorMessage = "You must select a department from a division")] 
     public int DepartmentId { get; set; } 

     [DisplayName("User Role")] 
     [UIHint("DropDownList")] 
     [Required(ErrorMessage = "You must select a role")] 
     public int SHP_UserRoleId { get; set; } 

     //[DisplayName("Email")] 
     //[DataType(DataType.EmailAddress)] 
     //[Required(ErrorMessage = "Email is required")] 
     //[RegularExpression(@"^[\w-\.][email protected]([\w-]+\.)+[\w-]{2,4}$", ErrorMessage = "Not a valid email")] 
     //[UniqueEmail(ErrorMessage = "User already exists")] 
     //public string EmailAddress { get; set; } 

     [DisplayName("End Date")] 
     public DateTime? EndDate { get; set; } 
    } 

Répondre

2

C'est un peuple problème commun rencontrent lorsqu'ils tentent d'utiliser leurs modèles d'affaires dans les vues et la raison en est que les modèles d'affaires sont plus proches de l'entreprise et la vue est plus proche de l'application (il est juste une représentation de ce modèle d'affaires). Aujourd'hui, vous avez deux écrans, demain peut-être trois.

Pour cette raison, je vous recommande d'utiliser des modèles de vue qui reflètent une vue donnée. Ainsi, dans votre cas, vous pouvez avoir deux modèles de vue pour chaque vue et les peupler à partir du même modèle de gestion. Les attributs de validation peuvent être placés sur des modèles de vue. Pour éviter le code standard dans la conversion entre vos modèles commerciaux et vos modèles de vue, vous pouvez utiliser AutoMapper.

+0

Votre lien vers Automapper semble très intéressant. J'ai besoin de savoir comment l'utiliser. Mais le plan est d'utiliser Automapper pour générer des classes de modèle de vue qui auront les attributs de validation sur eux. – arame3333

Questions connexes