博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在ASP.NET Core中实现自定义验证特性(Custom Validation Attribute)
阅读量:6529 次
发布时间:2019-06-24

本文共 1569 字,大约阅读时间需要 5 分钟。

这是我们在实际ASP.NET Core项目中用到的,验证用户名中是否包含空格。

开始是这么实现的(继承ValidationAttribute,重写IsValid方法):

public class NoSpaceAttribute : ValidationAttribute{    private static readonly Regex _noSpaceRegex = new Regex(@"^[^\s]+$", RegexOptions.Compiled);        public override bool IsValid(object value)    {        string stringValue = Convert.ToString(value, CultureInfo.CurrentCulture);        if (string.IsNullOrEmpty(stringValue))        {            return true;        }        return _noSpaceRegex.IsMatch(stringValue);    }        }

但发现这样只对服务端验证有效,对前端验证无效。查资料后知道原来还需要实现 IClientModelValidator 接口(需要安装nuget包——Microsoft.AspNetCore.Mvc.Abstractions):

public class NoSpaceAttribute : ValidationAttribute, IClientModelValidator{    //...    public void AddValidation(ClientModelValidationContext context)    {        MergeAttribute(context.Attributes, "data-val", "true");        var errorMessage = FormatErrorMessage(context.ModelMetadata.GetDisplayName());        MergeAttribute(context.Attributes, "data-val-nospace", errorMessage);    }    private bool MergeAttribute(        IDictionary
attributes, string key, string value) { if (attributes.ContainsKey(key)) { return false; } attributes.Add(key, value); return true; }}

这样依然不够,还需要添加真正干活的前端验证js代码:

$(function ($) {    $.validator.addMethod("nospace",        function (value, element, parameters) {            return /^[^\s]+$/g.test(value);        });    $.validator.unobtrusive.adapters.addBool("nospace");}(jQuery));

经过这3步,就可以正常进行前后端双重验证。

【参考资料】 

转载地址:http://batbo.baihongyu.com/

你可能感兴趣的文章
hdu 1695: GCD 【莫比乌斯反演】
查看>>
python的string操作总结
查看>>
如何把word中的图片怎么导出来呢?
查看>>
java.lang.NoSuchFieldError 异常原因
查看>>
Eclipse常见配置及常用插件
查看>>
FreeImage使用
查看>>
程序与资源管理
查看>>
CentOS 7 Apache 多端口部署 Web Apps 指南
查看>>
【无私分享:ASP.NET CORE 项目实战(第八章)】读取配置文件(二) 读取自定义配置文件...
查看>>
如何向nexus第三方库中传入自己的包
查看>>
FZU2143Board Game(最小费用流)
查看>>
数据库设计三大范式应用实例剖析(讲得比较清楚)
查看>>
【xamarin + MvvmCross 从零开始】三、MvvmCross 详解 (1)
查看>>
SAP 产品条码WMS结合 以及ABAP script的集成 BarCode
查看>>
Python连接Arduino的方法
查看>>
排序算法——冒泡排序
查看>>
Apache HTTP Server搭建虚拟主机
查看>>
浅析企业流程与制度的关系
查看>>
Skype for Business Server 2015-03-后端服务器-2-安装-CU6
查看>>
爱情是男人事业的核动力,七夕和大家分享!
查看>>