I have something like this:
[DisplayName("First Name")] [Required(ErrorMessage="{0} is required.")] [StringLength(50, MinimumLength = 10, ErrorMessage="{0}'s length should be between {2} and {1}.")] public string Name { get; set; }
I want to have the following output:
It is working when using ASP.NET MVC2 Error Summary, but when I try to validate it manually, like this:
ValidationContext context = new ValidationContext(myModel, null, null); List<ValidationResult> results = new List<ValidationResult>(); bool valid = Validator.TryValidateObject(myModel, context, results, true);
The results are:
What's wrong? Thanks.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With