MVC 自定义验证规则ValidationAttribute的使用
程序员文章站
2022-06-11 22:42:33
...
直接或者继承自ValidationAttribute。
如果能用正则表达式校验的直接从RegularExpressionAttribute继承。 public class QQNumberAttribute : RegularExpressionAttribute { public QQNumberAttribute() : base(@"^\d{5,10}$")//不要忘了^$ { this.ErrorMessage = "{0}属性不是合法的QQ号,QQ号需要5-10位数字"; //设定ErrorMessage的默认值。使用的人也可以覆盖这个值 } } 手机号的正则表达式:@"^1(3[0-9]|4[57]|5[0-35-9]|7[01678]|8[0-9])\d{8}$"
直接继承自ValidationAttribute,重写IsValid方法 比如校验中国电话号码合法性 public class CNPhoneNumAttribute:ValidationAttribute { public CNPhoneNumAttribute() { this.ErrorMessage = "电话号码必须是固话或者手机,固话要是3-4位区号开头,手机必须以13、15、18、17开头"; } //注意,不要override ValidationResult IsValid(object value, ValidationContext validationContext) public override bool IsValid(object value) { if(value is string) { string s = (string)value; if(s.Length==13)//手机号 { if(s.StartsWith("13")|| s.StartsWith("15") || s.StartsWith("17") || s.StartsWith("18")) { return true; } else { return false; } } else if(s.Contains("-"))//固话 { //010,021 0755 0531 string[] strs = s.Split('-'); if(strs[0].Length==3|| strs[0].Length==4) { return true; } else { return false; } } else { return false; } } else { return false; } } }
Models代码:
在这里插入代码片using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Layout.Models
{
public class Number
{
[PhNumber]
[Required(ErrorMessage = "必填项")]
public string Tel { get; set; }
[QQNumber]
[Required(ErrorMessage ="必填项")]
public string QQ { get; set; }
}
}
视图层代码:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<form action="~/QQNumber/Index" method="post">
Q Q:<input type="text" name="QQ" value="" /><br />
电话:<input type="text" name="Tel" value="" /><br />
<input type="submit" value="提交" />
</form>
</div>
</body>
</html>
控制器代码:
using Layout.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Layout.Controllers
{
public class QQNumberController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(Number Number)
{
if (ModelState.IsValid)
{
var script = String.Format("<script>alert('输入正确!');location.href='{0}'</script>", Url.Action("Index"));
return Content(script, "text/html");
}
else
{
string msg = Vaildate.GetError(ModelState);
return Content(msg);
}
}
}
}
新建一个类,记录错误:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
namespace Layout
{
public static class Vaildate
{
public static string GetError(ModelStateDictionary modelState)
{
StringBuilder builder = new StringBuilder();
foreach (var item in modelState.Keys)
{
if (modelState[item].Errors.Count <= 0)
{
continue;
}
builder.Append("属性【").Append(item).Append("】错误<br/>");
foreach (var error in modelState[item].Errors)
{
builder.AppendLine(error.ErrorMessage+"<br/>");
}
}
return builder.ToString();
}
}
}
新建一个类记录QQ的验证:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Layout
{
public class QQNumber : RegularExpressionAttribute
{
public QQNumber() : base(@"^\d{5,10}$")
{
this.ErrorMessage = "{0}属性不是合法的QQ号,QQ号需要5-10位数字"; //设定ErrorMessage的默认值。使用的人也可以覆盖这个值
}
}
}
新建一个类记录电话的验证:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Layout
{
public class PhNumber : ValidationAttribute
{
public PhNumber()
{
this.ErrorMessage = "电话号码必须是固话或者手机,固话要是3-4位区号开头,手机必须以13、15、18、17开头";
}
public override bool IsValid(object value)
{
if (value is string)
{
string s = (string)value; if (s.Length == 13)//手机号
{
if (s.StartsWith("13") || s.StartsWith("15") || s.StartsWith("17") || s.StartsWith("18"))
{
return true;
}
else
{
return false;
}
}
else if (s.Contains("-"))//固话
{
//010,021 0755 0531
string[] strs = s.Split('-');
if (strs[0].Length == 3 || strs[0].Length == 4)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
}
}
推荐阅读
-
thinkphp5.0自定义验证规则使用方法
-
使用jquery.validate自定义方法教程实现手机号码或者固话至少填写一个的逻辑验证
-
JSP使用JDBC完成动态验证及采用MVC完成数据查询的方法
-
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
-
jQuery Validate插件自定义验证规则的方法
-
基于ASP.NET MVC Remote验证的AdditionalFields与checkbox搭配使用的BUG
-
MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框
-
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
-
Angular:Reactive Form的使用方法和自定义验证器
-
ASP.NET全栈开发教程之在MVC中使用服务端验证的方法