無廢話MVC入門教程六[Model中的驗證規則]


朋友炒股兩個月賺了10萬,我幫他推廣一下公眾號,把錢用來投資總比放銀行連通貨膨脹都跑不過里強硬核離職,在家炒股 ,這是他每天的日志,有些經驗是花錢也買不到的。

本文目標

一、能夠使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM