zoukankan      html  css  js  c++  java
  • 无废话MVC入门教程六[Model中的验证规则]

    本文目标

    一、能够使用Model的Attribute进行服务端数据验证

    本文目录

    一、概述

    二、MVC提供的常用上下文

    三、自定义正则表达式验证

    一、概述

    为了确保数据的安全性,由Client发送到服务端的每一项数据我们都会做严格的数据校验。MVC做数据校验一般都会写在Model的Attribute上,代码看起来更加优雅、简洁。在下面的介绍中我们对校验进行了归类,一种是MVC框架里提供的默认校验方式、另一种通过继承来实现自定义规则。

    二、MVC提供的常用上下文

    1.Model中的代码

     1 using System.ComponentModel.DataAnnotations;
     2 
     3 namespace MVC3.Demo.Models
     4 {
     5     public class ValidationModel
     6     {
     7         [Display(Name = "特殊数字")]
     8         [Required(ErrorMessage = "请输入{0}")]
     9         [StringLength(20, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = 1)]
    10         public string InputNumber { get; set; }
    11     }
    12 }

    [Display(Name = "特殊数字")]:视图如显示的名称,具体看运行效果。

    [Required(ErrorMessage = "请输入{0}")]:InputNumber是必须填写的,如果不填写ErrorMessage属性的值将以显示在页面上。{0}为Display中Name属性的占位符。

    [StringLength(20, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = 1)]:字符串长度为:1-20之间。{0}、{1}、{2}分别为参数的占位符。

    2.View中的代码

     1 @model MVC3.Demo.Models.ValidationModel
     2 @{
     3     Layout = null;
     4 }
     5 <!DOCTYPE html>
     6 <html>
     7 <head>
     8     <title>ModelValidation</title>
     9 </head>
    10 <body>
    11     <div>
    12         @using (Html.BeginForm())
    13         {
    14             <div>
    15                 @Html.LabelFor(model => model.InputNumber)
    16                 @Html.TextBoxFor(model => model.InputNumber)
    17                 @Html.ValidationMessageFor(model => model.InputNumber)
    18             </div>
    19             <div>
    20                 <input type="submit" value="提交" />
    21             </div>
    22         }
    23     </div>
    24 </body>
    25 </html>

    @Html.LabelFor(model => model.InputNumber):显示Model中的DisplayAttribute的Name属性

    @Html.ValidationMessageFor(model => model.InputNumber):显示错误信息的HtmlHelper

    3.Control中的代码

     1         public ActionResult ModelValidation()
     2         {
     3             return View();
     4         }
     5 
     6         [HttpPost]
     7         public ActionResult Validation(Models.ValidationModel model)
     8         {
     9             if (ModelState.IsValid)
    10             {
    11                 var inputNumber = model.InputNumber;
    12             }
    13             return View();
    14         }

    ModelState.IsValid:校验客户端数据是否全部符合验证规则

    4.运行效果

    5.其他验证

    详细请查阅MSDN:http://msdn.microsoft.com/zh-cn/library/cc490428(v=vs.95).aspx

    三、自定义正则表达式验证

    1.常规方式

    1 using System.ComponentModel.DataAnnotations;
    2 
    3     public class ValidationModel
    4     {
    5         [RegularExpression(@"^[0-5]*$", ErrorMessage = "只能输入0-5间的数字")]
    6         public string InputNumber { get; set; }
    7     }

    [RegularExpression(@"^[0-5]*$", ErrorMessage = "只能输入0-5间的数字")]:第一个参数为要验证的正责表达式,第二个参数为错误消息。

    如果有多个Model中的属性都要使用这个正责表达式,那么“常规方式”显得代码大量的冗余

    2.继承方式

    用一个类去继承RegularExpressionAttribute,从而达到封装正责表达式和错误消息作用,类代码如下:

     1 using System;
     2 using System.ComponentModel.DataAnnotations;
     3 
     4 namespace MVC3.Demo.App_Code
     5 {
     6     public class SpecialValidation : RegularExpressionAttribute
     7     {
     8         public SpecialValidation() : base(@"^[0-5]*$") { }
     9 
    10         public override string FormatErrorMessage(string name)
    11         {
    12             return String.Format("{0}在0-5之间", name);
    13         }
    14     }
    15 }

    使用代码如下:

     1 using System.ComponentModel.DataAnnotations;
     2 using MVC3.Demo.App_Code;
     3 
     4 namespace MVC3.Demo.Models
     5 {
     6     public class ValidationModel
     7     {
     8         [SpecialValidation]
     9         public string InputNumber { get; set; }
    10     }
    11 }

    上面的代码效果等同于:[RegularExpression(@"^[0-5]*$", ErrorMessage = "{0}只能输入0-5间的数字")]

    3.运行效果

    版权:http://www.cnblogs.com/iamlilinfeng

  • 相关阅读:
    UVA 12901 Refraction 折射 (物理)
    UVA 12898
    UVA 690 PipelineScheduling 位运算+dfs+剪枝
    UVA1602 Lattice Animals 网格动物 (暴力,STL)
    UVA 810 A Dicey Promblem 筛子难题 (暴力BFS+状态处理)
    UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)
    UVA 536 TreeRocvery 树重建 (递归)
    二分查找
    OI记忆口诀
    OI经典语录
  • 原文地址:https://www.cnblogs.com/iamlilinfeng/p/2939892.html
Copyright © 2011-2022 走看看