how to put DisplayName on ErrorMessage format

前端 未结 2 1024
北恋
北恋 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:12

    Instead of (or perhaps in conjunction with) using the [DisplayName] attribute, use the [Display] attribute in System.ComponentModel.DataAnnotations. Populate its Name property.

    With that, you can use built-in validation attributes or custom attributes with ValidationContext's DisplayName.

    e.g.,

    [Display(Name="First Name")] // <-- Here
    [Required(ErrorMessage="{0} is required.")]
    [StringLength(50, MinimumLength = 10, ErrorMessage="{0}'s length should be between {2} and {1}.")]
    public string Name { get; set; }
    
    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题