ASP.NET Core custom validation attribute localization

后端 未结 3 656
面向向阳花
面向向阳花 2020-12-14 20:22

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         


        
3条回答
  •  佛祖请我去吃肉
    2020-12-14 20:58

    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/

提交回复
热议问题