как поставить DisplayName в формате ErrorMessage - PullRequest
23 голосов
/ 24 августа 2010

У меня есть что-то вроде этого:

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

Я хочу получить следующий вывод:

  • Требуется имя.
  • Длина имени должна быть от 10 до 50.

Работает при использовании ASP.NET MVC2 Сводка ошибок , но когда я пытаюсь ее проверитьвручную, как это:

        ValidationContext context = new ValidationContext(myModel, null, null);
        List<ValidationResult> results = new List<ValidationResult>();
        bool valid = Validator.TryValidateObject(myModel, context, results, true);

Результаты:

  • Имя обязательно.
  • Длина имени должна быть от 10 до 50.

Что не так?Спасибо.

Ответы [ 2 ]

36 голосов
/ 03 июня 2015

Вместо (или, возможно, в сочетании с) использованием атрибута [DisplayName] используйте атрибут [Display] в System.ComponentModel.DataAnnotations. Заполните его Name свойство.

При этом вы можете использовать встроенные атрибуты проверки или пользовательские атрибуты с ValidationContext DisplayName.

например.,

[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; }
10 голосов
/ 24 августа 2010

Ну, я думаю, что сделал это.

Мне пришлось создать еще один атрибут, подобный этому:

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

К счастьюэта аннотация данных расширяема.

...