1. 程式人生 > >無廢話MVC入門教程六[Model中的驗證規則]

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

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。
學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、直接。

本文目標

一、能夠使用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.其他驗證

三、自定義正則表示式驗證

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.執行效果