how to put DisplayName on ErrorMessage format

前端 未结 2 1030
北恋
北恋 2020-12-13 19:35

I have something like this:

    [DisplayName(\"First Name\")]
    [Required(ErrorMessage=\"{0} is required.\")]
    [StringLength(50, MinimumLength = 10, Err         


        
2条回答
  •  无人及你
    2020-12-13 20:14

    Well, I think I did it.

    I had to create another attribute like this:

    public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
    {
        private String displayName;
    
        public RequiredAttribute()
        {
            this.ErrorMessage = "{0} is required";
        }
    
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var attributes = validationContext.ObjectType.GetProperty(validationContext.MemberName).GetCustomAttributes(typeof(DisplayNameAttribute), true);
            if (attributes != null)
                this.displayName = (attributes[0] as DisplayNameAttribute).DisplayName;
            else
                this.displayName = validationContext.DisplayName;
    
            return base.IsValid(value, validationContext);
        }
    
        public override string FormatErrorMessage(string name)
        {
            return string.Format(this.ErrorMessageString, displayName);
        } 
    }
    

    And my model is:

        [DisplayName("Full name")]
        [Required]
        public string Name { get; set; }
    

    Thankfully this DataAnnotation is extensible.

提交回复
热议问题