首页 > 代码库 > (十二)ASP.NET MVC 数据验证

(十二)ASP.NET MVC 数据验证

  ASP.NET MVC 会自动根据属性的类型进行基本的校验,比如 int 类型的属性,在提交非整数类型的数据的时候就会报错。在 Action 中可以根据 ModelState.IsValid 进行判断是否验证通过,如果没有通过,使用下面的方法可以获取到报错信息:

public static string GetValidMsg(ModelStateDictionary modelState)
{
        StringBuilder sb = new StringBuilder();

        //遍历所有的属性
        foreach (var key in modelState.Keys)
        {
            //如果当前属性验证通过,则直接下一个属性
            if(modelState[key].Errors.Count <=0)
            {
                continue;
            }
            sb.Append($"属性【{key}】错误:");
  
            //遍历当前属性的所有错误验证信息
            foreach (var error in modelState[key].Errors)
            {
                sb.AppendLine(error.ErrorMessage);
            }
        }
        return sb.ToString();
}

  注:对于 ModelStateDictionary modelState, 要使用 System.Web.Mvc namespace 下的类。


 

  ASP.NET MVC 提供了在服务端验证请求数据的功能,只要在对应 Model的属性上标注 Attribute 就可以了。

常用验证 Attribute:

  • [Required]:必填的 
  • [StringLength(100)]:字符串最大长度100
  • [StringLength(100, MininumLength=10)]:字符串长度在10至100之间
  • [RegularExpression("正则表达式")]:使用正则表达式进行匹配
  • [Range(35,80)]:数值范围在35至88
  • [Compare("Password")]:标注这个 Attribute的属性要跟 Password 属性的值一样
  • [EmailAddress]:要符合邮箱格式

  验证 Attribute 上都有 ErrorMessage 属性,可以用来自定义报错信息,ErrorMessage 中可以用 {0} 作为属性名的占位。


 

  对于有些验证规则,我们可以进行自定义。比如验证QQ号码:

//ValidationAttribute 在System.ComponentModel.DataAnnotations 命名空间下
public class QQNumberAttribute:ValidationAttribute
{
    public QQNumberAttribute():base(@"^d{5,10}$")
    {
        this.ErrorMessage = "{0}属性不是合法的 QQ 号";
    }
}

  也可以重写 IsValid() 方法:

public class QQNumberAttribute : ValidationAttribute
{
    public QQNumberAttribute()
    {
        this.ErrorMessage = "{0}属性不是合法的 QQ 号";
    }
public override bool IsValid(object value) { bool flag = Regex.IsMatch(value.ToString(), @"^d{5,10}$"); return flag; } }

 

(十二)ASP.NET MVC 数据验证