• MVC Model数据验证


         首先说一下Model中[DataType(DataType.Password)]的作用,它表示在我们使用@Html.EditorForModel()时生成密码筐,其他的DataType一样。

    如果要用Vs自带的验证提示须引用

                      "~/Script/jquery.unobtrusive*"

                       "~/Script/jquery.validate*"    //其中*表示所有以其前面部份开头的文件

    1.非空验证  [Required]        

            [Required]
            [Display(Name="用户名")]
            public string UserName { get; set; }

        View中的代码

    @Html.LabelFor(m=>m.UserName)
    @Html.TextBoxFor(m=>m.UserName)
    @Html.ValidationMessageFor(m=>m.UserName)

    在Controller中须通过验证才做处理,所以要判断其是否通过了验证

                if (ModelState.IsValid)  // 表示通过了验证
                { 
                     // 其他处理
                }

    2.字符串长度验证: StringLength

            不超过6个字符:[StringLength(6)] 

            6~12个符:      [StringLength(12,MinimumLength=6)]

     Model中

            [Required]
            [StringLength(12,MinimumLength=6)]
            [Display(Name="用户名")]
            public string UserName { get; set; }

    View中

    @Html.LabelFor(m=>m.UserName)
    @Html.TextBoxFor(m=>m.UserName)
    @Html.ValidationMessageFor(m=>m.UserName)

    在Controller中须通过验证才做处理,所以要判断其是否通过了验证

             if (ModelState.IsValid)  // 表示通过了验证
                { 
                     // 其他处理
                }

    3.正则表达式验证:RegularExpression()

       如下:用户名只能是6-12个字母或数字

        Model中(错误提示信息可以ErrorMessage="{0}不合法")

            [Required]
            [RegularExpression(@"^[a-zA-Z0-9]{6,12}$")]
            [Display(Name="用户名")]
            public string UserName { get; set; }

    View中

    @Html.LabelFor(m=>m.UserName)
    @Html.TextBoxFor(m=>m.UserName)
    @Html.ValidationMessageFor(m=>m.UserName)

    Controller中

              if (ModelState.IsValid)  // 表示通过了验证
                { 
                     // 其他处理
                }

     4.范围验证:[Range(1,100)]

            [Required]
            [Range(1,100)]    // 范围验证1到100
            public int MyRange { get; set; }

        Range验时间及类型

                      [Range(typeof(DateTime),"1/1/1900","1/1/2200",ErrorMessage=".....")] 

            [Range(typeof(bool), "true", "true", ErrorMessage = "You must accept the terms")] 

    5.两次密码码证:[Compare(“要匹配的字段名(也就是第一次密码的字段名)”)]

            [Required]
            [DataType(DataType.Password)]
            [StringLength(30,ErrorMessage="密码须16-30个字符",MinimumLength=16)]
            public string password { get; set; }
    
            [Required]
            [DataType(DataType.Password)]
            [Compare("password",ErrorMessage="两次密码不一匹配")]
            public string password2 { get; set; }

    6.通过[Remote("Action","Controller")]在后台某个Controller下的某个Action下验证

                如:验证用户名在数据库中是否存在

            [Required]
            [RegularExpression(@"^[a-zA-Z0-9]{6,12}$")]
            [Display(Name="用户名")]
            [Remote("ValiUserName","Account")] //要添加using System.Web.Mvc引用
            public string UserName { get; set; }

          在控制器 AccountController 的代码如下

      //  意要验证的属性名称要与下面的参数的名字相同,如要验证UserName这个属性,则下面的参数名也为UserName
      public JsonResult ValiUserName(string UserName)
      {
           var result=GetDataNotHasUserName(UserName); // 右边这个方法返回bool,用于判断数据库中是否不存在传过来的UserName  
           return Json(result,JsonRequestBehavior.AllowGet);
       }

    6.自定义验证:XXXAttribute :ValidationAttribute 须实现ValidationAttribute接口

            首先得定义一个类XXXAttribute:ValidationAttribute接口(using System.ComponentModel.DataAnnotations;)代码如下

    using System.ComponentModel.DataAnnotations;
    
    namespace MvcApplication1
    {
        public class MaxLengthAttribute:ValidationAttribute
        {
            private int max = 1;
            public MaxLengthAttribute(int maxlenth)
            {
                max = maxlenth;
            }
    
            /// <summary>
            /// 重写 IsValid方法
            /// </summary>
            /// <param name="value">要验证的字断值</param>
            /// <param name="validationContext">执行验证的上下文</param>
            /// <returns></returns>
            protected override ValidationResult IsValid(object value, ValidationContext validationContext)
            {
                if (value.ToString().Length > max)
                {
                    return new ValidationResult(validationContext.DisplayName + "过长,须在" + max.ToString() + "个字符以内");
                }
                else
                {
                    return ValidationResult.Success;
                }
            }
        }
    }

    Model中的代码:只须取XXxAttribute前的XXx并加参数就可以了(如果没参就不写)

            [Required]
            [MaxLength(12)]
            public string UserName { get; set; }
  • 相关阅读:
    redis集群登陆
    锁机制
    关系型数据库事务遵循ACID原则
    前端之Css
    Python之操作redis数据库
    前端之HTML
    Excel之批量改变特定字体颜色(转载)
    jmeter之批量修改请求路径
    Python之time模块
    Python之os模块
  • 原文地址:https://www.cnblogs.com/yingger/p/3843677.html
Copyright © 2020-2023  润新知