源栈培训:ASP.NET MVC:Model验证进阶

更多
2020年02月02日 11点05分 作者:叶飞 修改

同:

除了:


自定义更容易




在生成的input标签中添加validation相关的属性,四步走:

  1. ValidationAttribute
  2. ValidationAttributeAdapter
            public override void AddValidation(ClientModelValidationContext context)
            {
                //子类使用抽象父类的静态方法
                MergeAttribute(context.Attributes, "data-val", "true");
                MergeAttribute(context.Attributes, "style", "color:red;");
    
                MergeAttribute(context.Attributes, "data-val-required", 
                    GetErrorMessage(context.ModelMetadata));
    
            }
  3. ValidationAttributeAdapterProvider
            public IAttributeAdapter GetAttributeAdapter(
                ValidationAttribute attribute, IStringLocalizer stringLocalizer)
            {
                if (attribute is LSRequiredAttribute classicMovieAttribute)
                {
                    return new LSRequiredAdapter(classicMovieAttribute, stringLocalizer);
                }
    
                return baseProvider.GetAttributeAdapter(attribute, stringLocalizer);
            }
  4. Startup.ConfigureServices()
                ///告诉ASP.NET:(依赖注入)
                ///当需要IValidationAttributeAdapterProvider实例的时候,
                ///实例化一个CustomValidationAttributeAdapterProvider类
                services.AddSingleton<IValidationAttributeAdapterProvider,
                    CustomValidationAttributeAdapterProvider>();




通过继承已有的验证Attribute实现(简单改动),性价比高!

比如:自定义的必填验证

    public class YZRequired : RequiredAttribute
    {
        //确定验证错误信息
        public override string FormatErrorMessage(string name)
        {
            //name为[Display(Name)](如果声明的话),否则为属性名
            return $"* {name}必须填写";
        }
    }

或者:自定义的只能为数字的格式验证

        public YzOnlyNumber() : base("[0-9]*"){}

注意:不要忘记



补充:关于构造函数

        //子类会自动的调用父类的构造函数
        //默认调用父类的无参构造
        //但是,当父类没有无参构造函数时
        //子类必须显式的指定调用父类的哪一个有参构造函数

此外,还可以继承自ValidationAttribute全新实现:性价比不高。

  • 除了在服务器端C#实现:ValidationAttribute, IClientValidatable
  • 还需要客户端的JavaScript实现……

(演示:之前的实现,略)




$.validator.unobtrusive.parse()
[BindRequired, FromQuery]

$(form).removeData("validator")

$.validator.addMethod()
$.validator.unobtrusive.adapters.add()








源栈培训 ASP.NET MVC
赞: 0 踩: 0

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 0

ASP.NET


RazorPage

微软推荐的、最新的、基于Razor页面和.NET core的新一代Web项目开发技术,包括Razor Tag Helper、Model绑定和Validation、Session/Cookie、内置依赖注入等……

MVC

过去两年间最流行的、基于.NET Framework和MVC模式的ASP.NET MVC框架,主要用于讲解安全、性能、架构和各种实战功能演示……

其他Web项目

包括WebForm和WebApi

全部
关键字



帮助

反馈