2010-03-13 2 views
7

у моего объекта есть поле с типом данных int. когда я вставляю html-форму в это текстовое поле, не номер, который валидатор говорит - поле должно быть числом. Как я могу изменить эти сообщения, как этогоизменить подтверждение сообщения в аннотациях данных

[Required(ErrorMessage = "Введите название")] 
    [DisplayName("Название")] 
    public int age { get; set; } 
+0

Любая причина, по которой этот вопрос был приостановлен? Пожалуйста, оставьте комментарий при опросе вопроса. ИМХО, это хороший вопрос. –

+0

Не все понимают русский. текст атрибута должен быть на английском языке. –

ответ

4

Я не нашел чистого пути для достижения этой цели с помощью аннотаций данных. Одним из способов было бы написать настраиваемое связующее устройство, но для такой простой задачи это похоже на большую работу.

Другой способ добиться этого - добавить папку App_GlobalResources в приложение ASP.NET. Добавьте файл ресурсов с именем Messages.resx, содержащий файл строки PropertyValueRequired.

PropertyValueRequired = "Some custom error message" 

В вашем Application_Start регистрации ключа класса ресурса:

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    DefaultModelBinder.ResourceClassKey = "Messages"; 
} 

Обратите внимание, что ASP.NET MVC 2 использует ключ ресурса PropertyValueInvalid вместо PropertyValueRequired.

IMO Использование данных Аннотации для выполнения логики проверки ограничены (возможно, в .NET 4 это изменится). Если вы хотите иметь полный контроль над логикой проверки, я бы рекомендовал использовать библиотеку проверки, такую ​​как Fluent Validation или xVal.

+0

У меня была точно такая же проблема. Я также перешел от аннотаций данных к Fluent Validation. Я считаю, что текущая проверка действительно полезна и проста в настройке. –

+0

Любые причины, по которым вы рекомендуете Fluentvalidation? Является ли это лучше, чем блок приложения для проверки веб-приложений? BTW, xVal в настоящее время устарел. –

+0

Я рекомендую FV, потому что он легкий, позволяет элегантно выразить сложные правила проверки, он предоставляет API для простого модульного тестирования этих правил проверки и имеет отличную интеграцию с ASP.NET MVC. –

2

Я столкнулся с той же проблемой и работал вокруг нее, указав регулярное выражение, которое допускает только положительные натуральные числа.

[Required(ErrorMessage = "Введите название")] 
[DisplayName("Название")] 
[RegularExpression(@"^[0-9]+$", ErrorMessage = "Поле возраст не является числом")] 
public int age { get; set; } 

Не уверен, что есть проблемы с этим решением. Кажется, это отлично работает для меня.

PS: Если вы не хотите, чтобы ведущие нули использовали "^[1-9]+[0-9]*$".

В ретроспективе: я должен признать, хотя немного странно добавлять регулярное выражение в целое число.

Смежные вопросы