MVC 自定义数据校验规则 Validation
原文链接 https://blog.csdn.net/fanbin168/article/details/79549024
MVC 数据验证,自定义验证规则
1>如果这个验证能直接用正则表达式进行校验的话,那我们就新建一个类,让它继承自RegularExpressionAttribute类
namespace MvcApp.Fileters
{
public class QQNumberAttribute : RegularExpressionAttribute
{
public QQNumberAttribute()
: base(@"^\d{6,10}$") //这里直接调用父类的构造函数传递一个正则表达式进行验证
{
this.ErrorMessage = "{0}不是合法的QQ好,QQ号是6-10位数字";
//这个{0} 是一个占位符,表示输入的QQ号码,当然我们也可以不要这个占位符的。
}
}
}
用法(在模型上打上这个特性标签就可以了):
public class UserInfo
{
public int Id { get; set; }
[Required]
public string Namge { get; set; }
//只要在这里打上这个自定义的QQNumber特性标签就可以了
[QQNumber(ErrorMessage="请检查QQ号码是否正确")]
public string QQ { get; set; }
}
2>如果觉得不会写正则,或者正则不方便的时候还可以这样,新建一个类,直接继承ValidationAttribute类,然后重新它的IsValid方法 验证成功返回true,验证失败返回false
namespace MvcApp.Fileters
{
//检查手机号码是否为正确
//注意ValidationAttribute类是 System.ComponentModel.DataAnnotations名称空间下的
public class CNPhoneNumberAttribute : ValidationAttribute
{
public CNPhoneNumberAttribute()
{
//默认的错误提示
this.ErrorMessage = "手机号码应该是11位,并且以13,15,18为开头的";
}
public override bool IsValid(object value)
{
if (value is string) //检查电话号码是否为字符串格式的
{
string phone = (string)value;
if (phone.Length == 11)
{
//手机号码是11位,并且以13,15,18开头的才是合法的
if (phone.StartsWith("13") || phone.StartsWith("15") || phone.StartsWith("18"))
{
return true;
}
else
{
return false;
}
}
return false;
}
return false;
}
}
}
用法一样(在模型上打特性标签就可以了)
public class UserInfo
{
public int Id { get; set; }
[Required]
public string Namge { get; set; }
//只要在这里打上这个自定义的QQNumber特性标签就可以了
[QQNumber(ErrorMessage="请检查QQ号码是否正确")]
public string QQ { get; set; }
[CNPhoneNumber(ErrorMessage="请检查手机号码是否正确")]
public string Phone { get; set; }
}
具体在控制器中怎么使用:
这里主要是使用System.Web.Mvc命名空间下的一个ModelStateDictionary类型的ModelState属性,判断他的IsValid属性是否为true,为true表示验证通过,为false表示验证失败,实体数据有错误。
using MvcApp.Models;
using MvcApp.UnitClass;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcApp.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index(UserInfo user)
{
string errorsMsg=string.Empty;
//实体数据是否验证通过IsValid的值为true表示验证通过,为fasle表示验证失败,有错误信息
if (ModelState.IsValid)
{
return Content("Id=" + user.Id + "Name=" + user.Name + "QQ=" + user.QQ + "Phone=" + user.Phone);
}
else
{
//获取实体的所有错误信息,(这个方法是我自己定义的哦)
errorsMsg= MvcErrorsMsgHelper.GetValidErrorsMes(ModelState);
}
return Content(errorsMsg);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
namespace MvcApp.UnitClass
{
public static class MvcErrorsMsgHelper
{
//特别要注意:ModelStateDictionary 是在System.Web.Mvc命名空间下的
public static string GetValidErrorsMes(ModelStateDictionary modelstate)
{
StringBuilder sb = new StringBuilder();
foreach (var propName in modelstate.Keys)//遍历每个属性
{
//如果这个属性的错误消息<=0 那么表示数据没有错误
if(modelstate[propName].Errors.Count<=0)
{
continue;
}
//一个属性可能有多个错误,那么就对这个属性的错误进行遍历
foreach (var error in modelstate[propName].Errors)
{
sb.Append(propName+"属性验证错误:"+error.ErrorMessage);//将错误信息添加到sb中
sb.Append("</br>");//换行
}
}
return sb.ToString();
}
}
}
验证一把:
运行程序,直接在浏览器中输入Get请求
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)