how to put DisplayName on ErrorMessage format

一曲冷凌霜 提交于 2019-11-28 19:19:19

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; }

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!