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; }

 

 

posted @ 2014-07-14 22:41  酒沉吟  阅读(443)  评论(0编辑  收藏  举报