• 定制本地化的默认验证错误消息


    .net core 模型验证的本地化

     创建一个类

    现在建立一个类,添加字段限制说明。

    public class ChatMessage
        {
            [Required]
            [DisplayName("用户名")]
            [MinLength(10)]
            public string UserName { get; set; }
    
            [DisplayName("内容")]
            [MaxLength(50)]
            [MinLength(10)]
            public string Content { get; set; }
    
            [Required]
            [DisplayName("发送时间")]
            public DateTime SendedTime { get; set; }
    
            [DisplayName("客户端名称")]
            [EmailAddress]
            [Phone]
            public string ClientName { get; set; }
    
    
            //[DisplayName("编码")]
            [Range(10, 50)]
            public int Code { get; set; }
        }

    初始环境效果

    现在想要将默认的错误提示语句改为中文提示。

    当然如果每个都写ErrorMessage话,错误提示也会直接读取ErrorMessage中编辑的内容,但是比较累。

    第一步添加资源文件

    第二步添加自己的验证信息

    public class CustomValidationMetadataProvider : IValidationMetadataProvider
        {
            private ResourceManager resourceManager; private Type resourceType;
            public CustomValidationMetadataProvider(string baseName, Type type)
            {
                resourceType = type;
                resourceManager = new ResourceManager(baseName, type.GetTypeInfo().Assembly);
            }
            public void CreateValidationMetadata(
                ValidationMetadataProviderContext context)
            {
                if (context.Key.ModelType.GetTypeInfo().IsValueType &&
                    context.ValidationMetadata.ValidatorMetadata
                        .Where(m => m.GetType() == typeof(RequiredAttribute)).Count() == 0)
                    context.ValidationMetadata.ValidatorMetadata.
                        Add(new RequiredAttribute());
                foreach (var attribute in context.ValidationMetadata.ValidatorMetadata)
                {
                    ValidationAttribute tAttr = attribute as ValidationAttribute;
                    if (tAttr != null/* && tAttr.ErrorMessage == null*/&& tAttr.ErrorMessageResourceName == null)
                    {
                        var name = tAttr.GetType().Name;
                        if (resourceManager.GetString(name) != null)
                        {
                            tAttr.ErrorMessageResourceType = resourceType;
                            tAttr.ErrorMessageResourceName = name;
                            tAttr.ErrorMessage = null;
                        }
                    }
                }
            }
        }

    第三步Startup中配置

     services.AddControllers(options =>
                {
                    options.ModelMetadataDetailsProviders.Add(new CustomValidationMetadataProvider("UtilPack.SiteResources", typeof(SiteResources)));
                });

    结果展示

     

    备注说明

    关于 tAttr.ErrorMessage == null 这一句的问题。

    PhoneAttribute和EmailAddressAttribute等的ErrorMessage不是null 。它的值和ErrorMessageString 相同。

    MinLengthAttribute,MaxLengthAttribute,RangeAttribute 和RequiredAttribute 的 ErrorMessage是null 和ErrorMessageString 不同

    参考资料

    https://docs.microsoft.com/zh-cn/archive/blogs/mvpawardprogram/aspnetcore-mvc-error-message

  • 相关阅读:
    SQL Service Database BACKUP & RESTORE
    vb.net 写入文件同步锁
    ActiveXObject Word.Application 打印小票
    jquery 计算输入的文本的utf-8字节长度
    sql 随笔 2015-08-07
    Android Calander Event
    Html 全屏切换效果
    C#中ref和out关键字的应用以及区别
    Angular安装、卸载 (高版本会导致component.html页面空白)
    bootstrap导航栏(navbar)下拉框无法展开
  • 原文地址:https://www.cnblogs.com/ningyouyou/p/14156083.html
Copyright © 2020-2023  润新知