1

Je dois définir la propriété ErrorMessage de l'attribut de validation DataAnnotation dans MVC 2.0. Par exemple, je devrais être en mesure de passer une carte d'identité au lieu du message d'erreur réelle pour la propriété du modèle, par exemple ...Validation et ErrorMessages ASP.NET MVC 2.0

[StringLength(2, ErrorMessage = "EmailContentID")] 
[DataType(DataType.EmailAddress)]   
public string Email { get; set; } 

Ensuite, utilisez cet ID (« EmailContentID ») pour récupérer une partie du contenu (message d'erreur) d'un autre service, par exemple une base de données. Ensuite, le message d'erreur est affiché à l'utilisateur au lieu de l'ID. Pour ce faire, j'ai besoin de définir la propriété ErrorMessage de l'attribut de validation DataAnnotation.

Il semble comme une tâche stright en avant par juste primordial protected override du DataAnnotationsModelValidatorProvider IEnumerable getValidators (métadonnées ModelMetadata, contexte ControllerContext, attributs IEnumerable)

Cependant, il est compliqué maintenant ....

A La propriété ErrorMessage de MVC DatannotationsModelValidator est en lecture seule. Donc, je ne peux rien définir ici B. La propriété System.ComponentModel.DataAnnotationErrorMessage (get et set) qui est déjà définie dans MVC DatannotationsModelValidator, donc je ne peux pas la redéfinir. Si j'essaie de le définir, je reçois le message d'erreur "La propriété ne peut pas définir plus d'une fois ...".

public class CustomDataAnnotationProvider : DataAnnotationsModelValidatorProvider 
{ 
     protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes) 
     { 
      IEnumerable<ModelValidator> validators = base.GetValidators(metadata, context, attributes); 

      foreach (ValidationAttribute validator in validators.OfType<ValidationAttribute>()) 
      { 
       messageId = validator.ErrorMessage; 
       validator.ErrorMessage = "Error string from DB And" + messageId ; 
      } 

      //...... 
     } 
    } 

Quelqu'un peut-il s'il vous plaît me donner la bonne direction à ce sujet?

Merci d'avance.

Répondre

0

Personnellement, je ne créerais pas un nouveau fournisseur héritant du fournisseur d'origine, mais je créerais un nouvel attribut héritant de ValidationAttribute ou de StringLengthAttribute.

quelque chose comme ça

public class MyNewValidationAttribute : StringLengthAttribute 
{ 
    public int ErrorMessageId 
    { 
     set { 
       var myErrorMessageFromDB = ""; //query database and get message. 
       this.ErrorMessage = myErrorMessageFromDB; 
      } 
    } 
} 

Maintenant, lorsque vous attribuez l'attribut

[StringLength(2, ErrorMessageId = 1 //equals id from database 
)] 
+1

(commentaire migré) « Merci beaucoup, mais si je hérité de System.ComponentModel.DataAnnotations.ValidationAttribute par conséquent comment pouvez Je m'assure que ces attributs utilisés dans MVC2 DataAnnotation fonctionnent avec la validation du client et du serveur Comment est-ce que je peux enregistrer ce nouvel attribut pour que les attributs de validation standard de MVC2 puissent toujours s'accrocher au nouveau? - Raj Aththanayake – Sampson