• MVC学习十:MVC 特性作用和MVC 验证


    根据代码分析特性用处

    1 [DisplayName("学员名")]
    2 [DataType(DataType.Text)]
    3 [StringLength(4,ErrorMessage="您输入的名字太长了~~~~")]
    4 public string Name { get; set; }

    [DisplayName("学员名")]作用显示属性名,用法是要配合HTML用于显示字符串的标签一起使用的(@Html.LabelFor(s => s.Name))

    效果:@Html.LabelFor(s => s.Name)在HTML代码中的 <label>学员名</label>

    如果这个属性没有DisplayName特性显示效果:<label>Name</label>

    [DataType(DataType.Text)]用作属性以什么HTML标签显示,用法必须和@Html.EditorFor(s => s.Name)一起使用

    DataType是枚举类型有很多的HTML标签类型。

    ③MVC特性控件验证

    一、验证准备

    第一步是要在web.config里启用客户端验证,这在MVC3自带的模板项目中已经有了:

    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>

    然后在被验证的View页面上要加入这样两个JavaScript,注意,他们是依赖于JQuery的:

    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

    验证消息的显示有两种,一种是ValidationSummary,它可以显示一份验证消息的汇总,包括从后台Action里返回的消息。

    @Html.ValidationSummary()

    另一种是Model中各属性对应HTML控件的验证消息:

    @Html.ValidationMessageFor(m => m.UserName)
    二、客户端验证
    基础验证
    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; }
    复制代码
    验证结果:

    自定义错误信息

    如果验证的特性中还有其他参数,那么ErrorMessage可以用占位符直接显示其他参数,如
    Model:
    复制代码
            [Required]
    
            [StringLength(100, ErrorMessage = "请输入{2}到{1}位的{0}。", MinimumLength = 6)]
    
            [DataType(DataType.Password)]
    
            [Display(Name = "密码")]
    
            public string Password { get; set; }
    复制代码
    验证结果:

    三、服务端验证

    //服务器端 验证(根据实体类属性的 验证特性来检查)
    if (!ModelState.IsValid)

    四、特性补充

    缓存页面

    ①Controller 或Action上打[OutPutCache]特性即可

    在Controller上加OutputCache特性时,Controller下的所有的Action都将实现此特性。如果同时Action也有此特性时,以Action为标准,Action的粒度更精细。

            //[OutputCache(Duration=20,VaryByParam="id")]
            /// <summary>
            /// OutputCache特性 相当于 aspx的整页缓存,默认为 绝对过期时间
            /// </summary>
            /// <returns></returns>
            public ActionResult Index()
            {
                return View(); //Content(DateTime.Now.ToString());
            }
    ②输出缓存CacheProfile使用配置文件设置缓存
    <!---CacheProfile配置文件中设置缓存-->  
      <caching>  
        <outputCacheSettings>  
          <outputCacheProfiles>  
            <add name="exampleCacheProfile" duration="20" location="Any" enabled="true"/>  
          </outputCacheProfiles>  
        </outputCacheSettings>  
      </caching>   
    <!---CacheProfile配置文件中设置缓存end-->  

     允许请求报文中出现危险标签字符

    [ValidateInput(false)]//关闭 请求报文中 危险标签字符验证
            public ActionResult Add(Models.Student stu)
            {
                if (!ModelState.IsValid)
                {
                    return Content("验证未通过~~~!");
                }
                return View();
            } 
  • 相关阅读:
    谷歌浏览器解决跨域
    vue 解决跨域问题
    nth-of-type & nth-child 的区别
    uniapp 小程序 获取位置信息
    笔记本使用命令创建wifi
    express每次修改后重新启动
    express 一个js文件中写多个路由 然后使用
    小程序分享到朋友圈
    小程序分享给朋友
    小程序客服功能实现
  • 原文地址:https://www.cnblogs.com/WarBlog/p/7411964.html
Copyright © 2020-2023  润新知