Как изменить 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?
Ответы
Ответ 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; }
Ответ 2
Попробуйте добавить
[RegularExpression("\\d+", ErrorMessage = "some message here")]
Ссылка на сообщение в блоге
Ответ 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.