Изменить значение по умолчанию "требуется поле {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")] 
560   2  

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

    Ничего не найдено.