Подтвердить что ты не робот

Как изменить ErrorMessage для проверки модели объекта в ASP.NET MVC?

У меня есть модель с свойством, определенным следующим образом:

    [Required(ErrorMessage="Please enter how many Stream Entries are displayed per page.")]
    [Range(0,250, ErrorMessage="Please enter a number between 0 and 250.")]
    [Column]
    public int StreamEntriesPerPage { get; set; }

Это работает, если пользователь не вводит что-то вроде "100q". Затем отображается довольно уродливая ошибка, в которой говорится: "Значение" 100q "недопустимо для StreamEntriesPerPage."

Есть ли атрибут, который я могу использовать для переопределения сообщения об ошибке по умолчанию, когда ввод не является int?

4b9b3361

Ответ 1

Да, вы можете использовать расширения аннотаций данных, пометить вашу собственность следующим образом:

[Required(ErrorMessage = "Please enter how many Stream Entries are displayed per page.")]
[Range(0, 250, ErrorMessage = "Please enter a number between 0 and 250.")]
[Column]
[DataAnnotationsExtensions.Integer(ErrorMessage = "Please enter a valid number.")]
public int StreamEntriesPerPage { get; set; }

Ответ 3

Похоже на предложение Feras, но без внешней зависимости:

using System;
using System.ComponentModel.DataAnnotations;

namespace MyDataAnnotations
{
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public class IntegerAttribute : DataTypeAttribute
    {
        public IntegerAttribute()
            : base("integer")
        {
        }

        public override string FormatErrorMessage(string name)
        {
            if (ErrorMessage == null && ErrorMessageResourceName == null)
            {
                ErrorMessage = "Enter an integer"; // default message
            }

            return base.FormatErrorMessage(name);
        }

        public override bool IsValid(object value)
        {
            if (value == null) return true;

            int retNum;

            return int.TryParse(Convert.ToString(value), out retNum);
        }
    }
}

Затем вы можете украсить атрибутом [Integer(ErrorMessage="...")].

Ответ 4

У меня была та же проблема, это решение разрешило это:

  • Создайте папку App_GlobalResources для вашего проекта (щелкните правой кнопкой мыши для проекта → Добавить → Добавить папку ASP.NET → App_GlobalResources).
  • Добавить файл resx в эту папку. Скажите MyNewResource.resx.
  • Добавить ключ ресурса PropertyValueInvalid с желаемым форматом сообщения (например, "content {0} является недопустимым для поля {1}" ). Если вы хотите изменить свойство PropertyValueRequired, добавьте его также.
  • Добавьте код DefaultModelBinder.ResourceClassKey = "MyNewResource" в свой код запуска Global.asax.

от: Как изменить сообщение об ошибке проверки по умолчанию в ASP.NET MVC?

Ответ 5

Попробуйте следующее:

[DataType(DataType.Currency, ErrorMessage ="......")]
public int YourProperty { get; set; }

Ответ 6

ErrorMessage не работал с Range-атрибутом для меня. В итоге я использовал атрибут RegularExpression.

Вместо:

[Range(0, 9, ErrorMessage = "...")]
public int SomeProperty { get; set; }

Я использовал:

[RegularExpression("^[0-9]$", ErrorMessage = "..."]
public int SomeProperty { get; set; }

Шаблоны регулярных выражений для других диапазонов и т.д. Можно найти по адресу: https://www.regular-expressions.info/numericranges.html.