Я использую ASP.NET MVC 3 и аннотации данных в моей модели и хочу получить сообщения об ошибках из базы данных. Поэтому я написал унаследованные атрибуты:
public class LocalizedRequiredAttribute : RequiredAttribute
{
public LocalizedRequiredAttribute(){}
public override string FormatErrorMessage(string name)
{
return GetByKeyHelper.GetByKey(this.ErrorMessage);
}
}
public class LocalizedRegularExpressionAttribute : RegularExpressionAttribute
{
public LocalizedRegularExpressionAttribute(string pattern) : base(pattern){}
public override string FormatErrorMessage(string name)
{
return GetByKeyHelper.GetByKey(this.ErrorMessage);
}
}
Я написал 2 «адаптера» для этих атрибутов, чтобы включить проверку клиентов, например:
public class LocalizedRequiredAttributeAdapter : DataAnnotationsModelValidator<LocalizedRequiredAttribute>
{
public LocalizedRequiredAttributeAdapter(ModelMetadata metadata, ControllerContext context, LocalizedRequiredAttribute attribute)
: base(metadata, context, attribute)
{
}
public static void SelfRegister()
{
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalizedRequiredAttribute), typeof(RequiredAttributeAdapter));
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
return new[] { new ModelClientValidationRequiredRule(ErrorMessage) };
}
}
И в моем global.asax у меня есть эти 2 строки:
LocalizedRegularExpressionAttributeAdapter.SelfRegister();
LocalizedRequiredAttributeAdapter.SelfRegister();
Я получаю исключение «Имена типов проверки в ненавязчивых правилах проверки клиента должны быть уникальными. Следующий тип проверки был просмотрен несколько раз: обязательно», когда моя модель отображает HTML для этого свойства:
[LocalizedRequired(ErrorMessage = "global_Required_AccountName")]
[LocalizedRegularExpression(User.ADAccountMask, ErrorMessage = "global_Regex_AccountName")]
public string AccountName { get; set; }
Что не так?