zoukankan      html  css  js  c++  java
  • asp.net mvc3 的数据验证(一)

    https://www.cnblogs.com/zhangkai2237/archive/2012/12/06/2806239.html

     对于web开发人员来说,对用户输入的信息进行验证是一个重要但是繁琐的工作,而且很多开发者都会忽略。asp.net mvc3框架使用的是叫做“数据注解”(DataAnnotations)的方式进行数据验证。

        这种方式允许程序在客户端和服务器端进行双重验证(asp.net的数据验证控件也是双重验证的)。双重验证的好处是 客户端验证会直接相应用户,不用提交表单,也就减轻了服务器的压力还提高了用户体验;而服务器端验证是确保数据的有效性和完整性,因为有时候客户端会关闭脚本功能。
        注意:要实现客户端验证,需要引用jquery以及jquery验证文件:
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Conten("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
       要实现服务器端验证,需要在提交表单后执行ModelState.IsValid
     
    一、基础验证
    1、Require(非空验证)
    Model:
        [Required]
            [Display(Name = "用户名")]
            public string UserName { get; set; }
    验证结果:

    2、StringLength(字符串长度验证)
            可以验证model属性的最大长度和最小长度,分别对应MaximumLength和MinimumLength,其中MinimumLength是可选的。
    Model:
            [Required]
            [StringLength(100, MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "密码")]
            public string Password { get; set; }
    验证结果

    3、RegularExpression(正则表达式)
        验证符合该正则表达式的属性。
    Model:
            [Required]
            [DataType(DataType.EmailAddress)]
            [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9._]+.[A-Za-z]{2,4}")]
            [Display(Name = "电子邮件地址")]
            public string Email { get; set; }
    验证结果:

     
    4、Range(数值范围验证)
            用来指定数值的最大值和最小值,第一个参数是最小值,第二个参数是最大值(包含他们本身)。可以用户int类型以及Double类型。
    Model:
            [Required]
            [Range(13, 18)]
            [Display(Name="年龄")]
            public int Age { get; set; }
    验证结果:

     
     
    二、附加验证
            附加验证是System.Web.Mvc中额外添加的两个验证特性,所以使用时必须添加using System.Web.Mvc
    1、Remote(远程验证)
            虽然asp.net mvc3提供了很多在model中直接验证数据的特性,但是很多逻辑复杂的验证没办法在model中来验证,所以mvc3框架提供了这个远程验证特性,他允许开发者在Controller中用C#代码来验证数据的有效性。
            一个很经典的应用时验证用户名是否重复。这个数据验证没办法在客户端验证,除非将所有的用户名都发往客户端(显然这是不可能的)。所以Remote特性只进行服务器端验证。但是它是通过异步的方式进行验证,所以有更好的用户体验。
     
    Model:
            [Required]
            [Display(Name = "用户名")]
            [Remote("CheckUserName","Account")]
            public string UserName { get; set; }
    Controller:
            public JsonResult CheckUserName(string userName)
            {
                var result = userName == "admin";
                return Json(result, JsonRequestBehavior.AllowGet);
            }
    验证结果:
            注意:如果要Post提交,则需要加上HttpMethod=“POST”:
        [Required(ErrorMessageResourceType=typeof(ErrorMessage),ErrorMessageResourceName="UserRequire")]
            [Display(Name = "用户名")]
            [Remote("CheckUserName","Account", HttpMethod="POST")]
            public string UserName { get; set; }

      而Controller中也可以直接接受Post的请求,当然你加上[Httppost]也是可以的:

    复制代码
            //[HttpPost]
            public JsonResult CheckUserName(string userName)
            {
                var result = userName != "admin";
                return Json(result, JsonRequestBehavior.AllowGet);
            }
    复制代码
     
    2、Compare(相同验证)
            Compare特性是用来验证输入的两个数据是否完全相同。最典型的例子就是注册时两次输入的密码是否相同。
    Model:
    复制代码
            [Required]
            [StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "密码")]
            public string Password { get; set; }
     
     
            [DataType(DataType.Password)]
            [Display(Name = "确认密码")]
            [Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
            public string ConfirmPassword { get; set; }
    复制代码
    验证结果:

     
            上面的是asp.net mvc3框架的几种常用的数据注解,除了后两种mvc特有的特性,其他的特性都在System.ComponentModel.DataAnnotations中,恰当的使用会大大提高开发效率。具体的参见:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.aspx
  • 相关阅读:
    Kubernets 第一讲 初探
    docker 运行nginx并进入容器内部、端口映射
    Docker 国内镜像的配置及使用
    Centos7上安装docker
    富文本编辑器--FCKEditor 上传图片
    在centos7上安装elasticSearch
    Centos7上卸载openJdk安装,安装自己的JDK1.8
    fastdfs 上传图片 完整版
    nginx 启动报错 “/var/run/nginx/nginx.pid" failed” 解决方法
    nginx + fastdfs 的开机自启动
  • 原文地址:https://www.cnblogs.com/LuoEast/p/7839390.html
Copyright © 2011-2022 走看看