Я в настоящее время пытаюсь выяснить, как локализовать сообщения об ошибках, сгенерированные MVC. Позвольте мне использовать образцовый редактор связей по умолчанию в качестве примера, таким образом, я могу объяснить проблему.
Принятие у меня есть форма, где пользователь вводит их возраст. Пользователь затем входит "десять" в к форме, но вместо того, чтобы получить ожидаемую погрешность
"Возраст должен быть beween 18 и 25".
сообщение
"Значение 'десять' не допустимо для Возраста".
отображен.
Свойство возраста объекта определяется ниже:
[Range(18, 25, ErrorMessageResourceType = typeof (Errors),
ErrorMessageResourceName = "Age", ErrorMessage = "Range_ErrorMessage")]
public int Age { get; set; }
После некоторого рытья я замечаю, что этот текст ошибки прибывает из System.Web.Mvc.Resources.DefaultModelBinder_ValueInvalid
в MvcResources.resx
файл.
Теперь, как может создать локализованные версии этого файла?
Поскольку решение, например, должно я загружать источник MVC и добавлять MvcResources.en_GB.resx
, MvcResources.fr_FR.resx
, MvcResources.es_ES.resx
и MvcResources.de_DE.resx
, и затем скомпилируйте мою собственную версию MVC.dll
?
Но мне не нравится эта идея. Кто-либо еще знает лучший путь?
См. http://forums.asp.net/p/1512140/3608427.aspx , прокрутите вниз до ответа Брэда Уилсона внизу страницы (сб, 09 января 2010 г., 3:20 ВЕЧЕРА). В DefaultModelBinder есть статические свойства, которые можно установить для локализации общих сообщений об ошибках.
Причина, по которой вместо сообщения [Range] используется типовое сообщение об ошибке, заключается в том, что [Range] предоставляет сообщение об ошибке проверки , но в данном конкретном случае это ошибка привязки . Абсолютно никакая среда не может надеяться преобразовать строку «десять» в Int32, поэтому она не может даже запустить валидатор [Range]. Это то, что управляет ключ "PropertyValueInvalid", упомянутый в этом форуме.
Пробовали ли вы: IDataErrorInfo свойство
Эта статья поможет