Как разместить DisplayName в формате ErrorMessage
У меня есть что-то вроде этого:
[DisplayName("First Name")]
[Required(ErrorMessage="{0} is required.")]
[StringLength(50, MinimumLength = 10, ErrorMessage="{0} length should be between {2} and {1}.")]
public string Name { get; set; }
Я хочу получить следующий вывод:
- Требуется имя.
- Длина имени должна быть между 10 и 50.
Он работает при использовании ASP.NET MVC2 Error Summary, но когда я пытаюсь проверить его вручную, выполните следующие действия:
ValidationContext context = new ValidationContext(myModel, null, null);
List<ValidationResult> results = new List<ValidationResult>();
bool valid = Validator.TryValidateObject(myModel, context, results, true);
Результаты:
- Требуется имя.
- Длина имени должна быть между 10 и 50.
Что случилось? Спасибо.
Ответы
Ответ 1
Ну, я думаю, что сделал это.
Мне пришлось создать еще один атрибут:
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);
}
}
И моя модель:
[DisplayName("Full name")]
[Required]
public string Name { get; set; }
К счастью, эта DataAnnotation расширяема.
Ответ 2
Вместо (или, возможно, в сочетании) с использованием атрибута [DisplayName]
используйте атрибут [Display]
в System.ComponentModel.DataAnnotations
. Заполните его свойство Name
.
С этим вы можете использовать встроенные атрибуты проверки или настраиваемые атрибуты с помощью ValidationContext
DisplayName
.
например.
[Display(Name="First Name")] // <-- Here
[Required(ErrorMessage="{0} is required.")]
[StringLength(50, MinimumLength = 10, ErrorMessage="{0} length should be between {2} and {1}.")]
public string Name { get; set; }