При использовании валидации полей на стороне клиента, появляются некоторые сообщения на английском языке. Например:
The field must be a number
Это сообщение не так просто удаляется. Поскольку разработчики майкрософта включили это в MVC в самый последний момент, они уже не позаботились о жителях других странах и национальностях, чтобы им было удобно читать подобное сообщение на своём языке.
В результате эксперты предлагают разные решения:
- Не использовать валидацию на стороне клиента
- Не использовать ClientDataTypeModelValidatorProvider
- Заменить ClientDataTypeModelValidatorProvider на свой провайдер
В поисках самого решения, я нашёл самый оптимальный выход, который подходит моим требованиям. В этом решении используется валидация javascript на стороне клиента, и не отображается несчастное сообщение на английском языке “The field must be a number”.
Итак делаем следующее:
В моделе пишем настройки валидации:
public class Product
{
[Range(100, 1000)]
public int QuantityInStock { get; set; }
public decimal Cost { get; set; }
}
На стороне контроллера, добавляем следующий код, удаляющий валидацию типов на стороне клиента:
// Удаляем Провайдр валидации типов со стороны клиента, чтобы не появлялось сообщение на англ.
// The field xxxx must be a number
foreach (ModelValidatorProvider prov in ModelValidatorProviders.Providers)
{
if (prov.GetType().Equals(typeof(ClientDataTypeModelValidatorProvider)))
{
ModelValidatorProviders.Providers.Remove(prov);
break;
}
}
Другой простой способ, который может помочь - это RegularExpression, например:
RegularExpression("\\d{12}", ErrorMessage = "Пожалуйста вводите не более 12 цифр в поле телефона")]
Можно также и добавить собственный провайдер для валидации типов данных на стороне клиента. Подробнее об этом на английском языке можно найти информацию здесь:
http://jwwishart.wordpress.com/2010/03/22/custom-server-and-client-side-required-validator-in-mvc-2-using-jquery-validate/