I\'m trying to implement localization in a custom validation attribute in asp.net core 1.0. This is my simplified viewmodel:
public class EditPasswordViewMod
Implement an adapter for localization:
public class RequiredIfAttributeAdapter : AttributeAdapterBase
{
public RequiredIfAttributeAdapter(RequiredIfAttribute attribute, IStringLocalizer stringLocalizer) : base(attribute, stringLocalizer) {}
public override void AddValidation(ClientModelValidationContext context) {}
public override string GetErrorMessage(ModelValidationContextBase validationContext)
{
return GetErrorMessage(validationContext.ModelMetadata, validationContext.ModelMetadata.GetDisplayName());
}
}
Implement a provider for the adapter(s):
public class CustomValidationAttributeAdapterProvider : IValidationAttributeAdapterProvider
{
private readonly IValidationAttributeAdapterProvider _baseProvider = new ValidationAttributeAdapterProvider();
public IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer)
{
if (attribute is RequiredIfAttribute)
return new RequiredIfAttributeAdapter(attribute as RequiredIfAttribute, stringLocalizer);
else
return _baseProvider.GetAttributeAdapter(attribute, stringLocalizer);
}
}
Register the provider in Startup.cs:
services.AddSingleton();
Credits to this blog: https://blogs.msdn.microsoft.com/mvpawardprogram/2017/01/03/asp-net-core-mvc/