在ASP.NET Core中实现自定义验证特性(Custom Validation Attribute)
2017-05-05 14:04
811 查看
这是我们在实际ASP.NET Core项目中用到的,验证用户名中是否包含空格。
开始是这么实现的(继承ValidationAttribute,重写IsValid方法):
但发现这样只对服务端验证有效,对前端验证无效。查资料后知道原来还需要实现 IClientModelValidator 接口(需要安装nuget包——Microsoft.AspNetCore.Mvc.Abstractions):
这样依然不够,还需要添加真正干活的前端验证js代码:
经过这3步,就可以正常进行前后端双重验证。
【参考资料】
Validation using IClientModelValidator
ASP.Net Core MVC - Client-side validation for custom attribute
开始是这么实现的(继承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<string, string> 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步,就可以正常进行前后端双重验证。
【参考资料】
Validation using IClientModelValidator
ASP.Net Core MVC - Client-side validation for custom attribute
相关文章推荐
- MVC学习十四:ASP.NET MVC如何实现自定义验证 AgeRangeAttribute
- Asp.net 2.0 实现自定义Email格式有效性验证(示例代码下载)
- ASP.NET CustomValidator自定义验证是否为空
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- Asp.net 2.0 实现自定义Email格式有效性验证(示例代码下载)
- Asp.net 2.0 实现自定义Email格式有效性验证(示例代码下载)
- ASP.Net4中实现自定义的请求验证
- ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
- 创建自定义路由处理程序(Creating a Custom Route Handler) | 定制路由系统| 高级路由特性 |精通ASP-NET-MVC-5-弗瑞曼
- HTML5中custom data-*特性与asp.net mvc 3 表单验证
- ASP.Net4中实现自定义的请求验证
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- Asp.net 2.0 实现自定义Email格式有效性验证(示例代码下载)
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介