Изменить значение по умолчанию "требуется поле {0}" (окончательное решение?)
Добрый день!
У меня есть следующий класс ViewModel, который я использую для формы входа:
using System.ComponentModel.DataAnnotations;
...
public class UserLogin : IDataErrorInfo
{
[Required]
[DisplayName("Login")]
public string Login { get; set; }
[Required]
[DisplayName("Password")]
public string Password { get; set; }
[DisplayName("Remember Me")]
public bool RememberMe { get; set; }
#region IDataErrorInfo Members
// This will be a Model-level error
public string Error
{
get
{
if (!WebUser.CanLogin(Login, Password))
{
return Resources.ValidationErrors.InvalidLoginPassword;
}
else
{
return String.Empty;
}
}
}
// All is handled by DataAnnotation attributes, just a stub for interface
public string this[string columnName]
{
get
{
return string.Empty;
}
}
#endregion
}
И это в Global.asax:
DefaultModelBinder.ResourceClassKey = "BinderMessages";
ValidationExtensions.ResourceClassKey = "BinderMessages";
Файл ресурсов BinderMessages.resx помещается внутри App_GlobalResources он имеет два ключа InvalidPropertyValue (который работает) и PropertyValueRequired который не работает и дает мне сообщение по умолчанию.
Вопрос: Можно ли изменить это сообщение, или оно связано с Датааннотациями?
Я нашел много сообщений об этом, но без решения. А пока я просто отступаю к это:
[Required(ErrorMessageResourceType = typeof(Resources.ValidationErrors), ErrorMessageResourceName = "Required")]
2 ответов:
Вы можете создать пользовательский
ValidationAttribute, который расширяетRequiredAttributeи устанавливает там значения. Что-то вроде:public class MyRequiredAttribute : RequiredAttribute { public MyRequiredAttribute() { ErrorMessageResourceType = typeof(Resources.ValidationErrors); ErrorMessageResourceName = "Required"; } }Затем украсьте свою модель пользовательским атрибутом.
Сообщение по умолчанию компилируется в сборку DataAnnotations в файле ресурсов в разделеSystem.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources.resourcesи имеет видRequiredAttribute_ValidationError=The {0} field is required.. Поэтому, чтобы ответить на ваш вопрос, Да, это сообщение является частью DataAnnotations.Edit:
PropertyValueRequiredиспользуется для ошибок на нулевых значениях с ненулевыми типами. Как указано нижеPropertyValueInvalidиспользуется для типа ошибка преобразования.
Я сделал подход, используя синглетный класс для обеспечения переводов. Вам все равно нужно вывести все атрибуты, как предлагает @bmancini. Преимущество моего подхода заключается в том, что вы можете использовать несколько таблиц строк (или переключать источник перевода) без необходимости изменять какую-либо другую логику.
Поскольку моя запись в блоге довольно большая, я просто дам ссылку: http://blog.gauffin.org/2010/11/simplified-localization-for-dataannotations/
Comments