Я не думаю, что это возможно или, по крайней мере, невозможно сделать без предоставления специального адаптера для атрибута. У вас нет никакого способа в конструкторе атрибута получить доступ к методу / свойству, к которому применяется атрибут. Без этого вы не сможете получить информацию о типе или имени свойства.
Если вы создали адаптер для своего атрибута, а затем зарегистрировали его в DataAnnotationsModelValidatorProvider, то в GetClientValidationRules у вас будет доступ к ControllerContext и метаданным модели. Исходя из этого, вы сможете получить правильный тип и имя ресурса, затем найти правильное сообщение об ошибке и добавить его в правила проверки клиента для атрибута.
public class Required2AttributeAdapter
: DataAnnotationsModelValidator<Required2Attribute>
{
public Required2AttributeAdapter( ModelMetadata metadata,
ControllerContext context,
Required2Attribute attribute )
: base( metadata, context, attribute )
{
}
public override IEnumerable<ModelClientValidationRule>
GetClientValidationRules()
{
// use this.ControllerContext and this.Metadata to find
// the correct error message from the correct set of resources
//
return new[] {
new ModelClientValidationRequiredRule( localizedErrorMessage )
};
}
}
Тогда в global.asax.cs
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof( Required2Attribute ),
typeof( Required2AttributeAdapter )
);