在ASP.NET MVC5視圖模型中應用必填、正則表達式、比較等模型驗證

2020-12-11 一都編程

01第1節:視圖模型

一、概述:

在ASP.NET MVC 5中,MVC中的M指的是視圖模型,此模型對象只是給View視圖使用的模型,與經典三層架構中的數據模型是不同的,數據模型是與DAL(數據訪問層)打交道的。二者不要混淆了。

ASP.NET MVC5模型驗證

MVC 5框架用來擔當經典三層架構中的UI層。ASP.NET MVC 5與ASP.NET WebForm框架都是用來擔當UI層的,都是微軟為Web應用程式開發推出的一套UI框架。

二、創建視圖模型類:

在使用Visual Studio 2019開發的ASP.NET MVC 5項目的「Models」文件夾中創建的Model是ViewModel,也就是視圖模型,是供Razor視圖使用的。因此在以後的創建視圖模型時,建議都要以「ViewModel.cs」結尾,如「StudentViewModel.cs 」表示學生視圖模型,微軟的例子中,視圖模型也是以「ViewModel」為後綴的。

MVC5視圖模型類

ASP.NET MVC 5中的視圖模型類就是一個普通的類,使用時在其中編寫屬性即可。這些屬性是可以添加數據註解和模型驗證的,使用System.ComponentModel.DataAnnotations命名空間下的驗證,可以實現無需編寫JS代碼,就可以實現客戶端的驗證。

下面重點講解給屬性添加的各種註解和驗證,這些都是微軟在.NET類庫中幫我們已經編寫好的,需要時添加到屬性上即可。

02第2節:數據註解和模型驗證

由於視圖模型是供視圖使用的,那麼還可以進行一些數據驗證,能夠驗證的這些屬性稱為模型驗證。

完整的StudentViewModel視圖模型C#代碼如下:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.ComponentModel.DataAnnotations;namespace Yido.Edu.Models{public class StudentViewModel{[Display(Name = "Id")][Required(ErrorMessage="Id不可為空")]public Guid Id { get; set; }[Display(Name="姓名")][Required(ErrorMessage="姓名不能為空")][StringLength(6,ErrorMessage="最大長度為6個")]public string Name { get; set; }[Display(Name="郵箱地址")][Required(ErrorMessage="郵箱不可為空")][StringLength(255,ErrorMessage="最大為{0}個字符")][EmailAddress(ErrorMessage="郵箱地址格式不正確")]public string Email { get; set; }[Display(Name="年齡")][Required][Range(1,150)]public int Age { get; set; }[Display(Name="手機號碼")][Required()][RegularExpression("^1{1}[0-9]{10}$",ErrorMessage="手機號不正確")]public string PhoneNumber { get; set; }[Display(Name="密碼")][Required][StringLength(8)]public string Pwd { get; set; }[Display(Name="確認密碼")][Required][StringLength(8)][Compare("Pwd",ErrorMessage="密碼不一致")]public string ConfrimPwd { get; set; }}}

從此模型代碼中看,與三層架構中的數據實體模型是不一樣的,在數據實體Model中是不能使用數據註解驗證特性的。

一、Display特性:

使用Display特性可為模型對象中的屬性設置顯示名稱。

[Display(Name="姓名")]public string Name { get; set; }

這樣,當我們在視圖中使用Name屬性時,就可以將Name屬性使用中文的「姓名」來顯示。

二、Required特性:

Required特性用於指定屬性的必需項驗證,對於模型驗證特性,則其中的指定的錯誤信息,需要在提交的方法中使用ModelState.IsValid來判斷,從而才能輸出錯誤信息。

MVC5必填驗證

[Display(Name="姓名")][Required(ErrorMessage="姓名不能為空")]public string Name { get; set; }

三、StringLength特性:

使用StringLength特性可以指定屬性值接受的最大長度和最小長度的字符串。長度值是按字符數計算的,1個漢字也是1個字符。默認是最大值。

[Display(Name="姓名")][Required(ErrorMessage="姓名不能為空")][StringLength(6,ErrorMessage="最大長度為6個")]public string Name { get; set; }

此代碼表示Name的值最大為6個字符,如果還要設置最小值,則可以如下設置:

[StringLength(6,MinimumLength=1,ErrorMessage="最大長度為{0}個,最小長度為{1}")]

在ErrorMessage屬性的值中可以使用{0}表示最大值,{1}表示最小值。

四、EmailAddress特性:

使用EmailAddress特性則可以更好的控制電子郵件地址的驗證提示信息。

[Display(Name="郵箱地址")][Required(ErrorMessage="郵箱不可為空")]

[StringLength(255,MinimumLength=20,ErrorMessage="最大為{0}個字符,最小為{1}個字符。")]

[EmailAddress(ErrorMessage="郵箱地址格式不正確")]

public string Email { get; set; }

五、Range特性:

使用Range特性用於指定數值類型的最小值和最大值,支持整數和小數。

[Display(Name="年齡")][Required][Range(1,150)]public int Age { get; set; }

指定年齡的值只能是1到150之間的數字。

六、RegularExpression特性:

RegularExpression特性可以將強大的正則表達式應用於模型對象的屬性上。

手機號驗證

[Display(Name="手機號碼")][Required()][RegularExpression("^1{1}[0-9]{10}$",ErrorMessage="手機號不正確")]public string PhoneNumber { get; set; }

那麼對於郵箱的驗證,除了可以使用EmailAddress特性驗證外,還可以使用RegularExpression特性驗證。

七、Compare特性:

一般情況下我們在輸入密碼時,都會讓輸入兩遍,目的就是為了確保兩次輸入的密碼相同,所以在ASP.NET MVC 5中,Compare特性就是為此服務的。可以很輕鬆的實現兩個模型對象的屬性值是否相同。

[Display(Name="密碼")][Required][StringLength(8)]public string Pwd { get; set; }[Display(Name="確認密碼")][Required][StringLength(8)][Compare("Pwd",ErrorMessage="密碼不一致")]public string ConfrimPwd { get; set; }

03第3節:添加驗證文件

對於ASP.NET MVC 5的驗證,微軟使用的是雙重驗證,即客戶端驗證和伺服器端驗證。

客戶端驗證使用的是:<script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/jquery.validate.unobtrusive.js"></script>

2. 伺服器端驗證有兩種:

使用C#代碼ModelState.IsValid在控制器中進行判斷。

這兩個JS文件都需要jquery主文件的支持:

<script src="~/Scripts/jquery-1.10.2.js"></script><script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/jquery.validate.unobtrusive.js"></script>

在ASP.NET MVC 5中,在視圖模型中提供的模型驗證是雙重驗證,即在客戶端使用JS驗證,也在伺服器端使用C#代碼進行驗證,這樣可以解決當客戶端瀏覽器上的JS被禁用後,其驗證在伺服器端繼續驗證,從而保證提交到伺服器上的數據是正確的。

相關焦點

  • 自學MVC看這裡——全網最全ASP.NET MVC 教程匯總
    以下系列文章分別詳解了MVC框架的三部分,因此能夠幫助初學者深入了解MVC框架Asp.Net MVC 控制器Asp.Net MVC 路由Asp.Net MVC 視圖(概述) - Part.1Asp.Net MVC(創建一個任務列表應用程式) - Part.1Asp.Net MVC(理解模型、視圖和控制器)
  • C++、Java、JavaScript中的正則表達式
    上面一個示例中用到的「^」、「w」、「{5,17}」等都是正則表達式中的常用符號,這些符號在正則表達式中都有特殊的含意。下面這個表格是Java中的正則表達式常用符號的含意(只抽取了其常用的部分進行說明,就這些部分其實可以解決關於正則表達式的絕大多數的問題了)。
  • php正則表達式基本知識與應用詳解
    ① 有哪些常用的轉義字符② 什麼是限定符與定位符③ 什麼是單詞定位符④ 特殊字符有哪些⑤ 什麼是逆向引用以及怎樣使用逆向引用⑥ 匹配模式⑦ php中怎樣使用正則表達式⑧ php中哪些方面需要用到正則⑨ 怎樣進行郵箱匹配,url匹配,手機匹配⑩ 怎樣使用正則替換字符串中某些字符⑪ 貪婪匹配與惰性匹配區別
  • NET開發-WebForm必填驗證對TextBox控制項的非空驗證及屬性的使用
    .NET開發-非空驗證控制項1.概述在ASP.NET Web應用程式中,對於網頁上的驗證,一般情況下都是在客戶端使用JavaScript代碼進行驗證,但是對於初學者而言或基於微軟的.NET開發者而言,對JavaScript
  • 學會使用正則表達式——驗證郵箱地址格式
    在Python語言中,可以使用成員運算符in來判斷,不過在這裡我們使用正則表達式來檢測。正則表達式就是一段字符串,這段字符串由一些預定義的字符、符號以及這些字符或符號組合而成。>上面的代碼pattern是正則表達式,使用re模塊的match函數匹配郵箱地址,驗證郵箱地址是否包含「@」字符。
  • Python中使用re模塊實現正則表達式的匹配字符串操作
    第八十二節:匹配字符串經過上一節比較枯燥的基礎內容,今天來看看如何利用正則表達式在Python中進行具體操作。在Python中使用正則表達式,首先要導入一個re模塊。re就是Regular Expression(正則表達式)的縮寫,所以導入re模塊就是導入「正則表達式模塊」。導入re模塊的代碼比較簡單,它是這樣的:Import re今天的學習內容就是使用正則表達式匹配字符串。
  • 正則表達式在VBA中間是如何應用?正則表達式的實現方式?
    Hi,大家好,本章節開始將會從零開始和大家用圖文的方式,讓你從零基礎學會正則表達式!有興趣的小夥伴可以持續關注我,或者在專欄中進行查看自我學習,願與君攜手前行!在上一個章節說到正則表達式的入門級知識點,本節將會與大家分享一下正則表達式的是具體實現方式是怎麼樣的?
  • Python中的正則表達式
    什麼是正則表達式正則表達式是用於處理字符串的強大工具,它使用預定義的特定模式去匹配一類具有共同特徵的字符串,主要用於快速、準確地完成複雜字符串的查找、替換等。正則表達式進行匹配的流程如下圖所示:正則表達式匹配過程是:依次拿出表達式和文本中的字符比較,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
  • JavaScript高級什麼是正則以及正則表達式的簡單運用
    在實際開發中 ,經常會用到一些表單的驗證 ,提交表單的時候一般都會預校驗 ,比如手機號填寫是否合格 ,用戶暱稱填寫是否規範等 ,這些就要用到正則表達式什麼是正則表達式?用於匹配規律規則的表達式,正則表達式最初是科學家對人類神經系統的工作原理的早期研究,現在在程式語言中有廣泛的應用。正則表通常被用來檢索、替換那些符合某個模式(規則)的文本。
  • 文本函數和正則表達式, 文本分析事無巨細
    下面主要引薦主要的文本函數和正則表達式,用來分析和處理文本文件,而這也成為社科研究中的新趨勢。歡迎到社群交流文本分析在實證研究中的應用。文本縮寫到n位用文本2替換出現在文本1中的所有正則表達式re下面這些常用正則表達式,也可以看看:https://blog.csdn.net/wangjia55/article/details/7877915 正則表達式用於字符串處理、表單驗證等場合,實用高效
  • Javascript正則表達式實現表單驗證
    今天我們通過實現用戶註冊頁面驗證來學習js當中的正則表達式的構造1. 題目:正則表達式實現用戶註冊頁面驗證 。在各文本框中輸入信息,在文本框失去焦點時,驗證信息,如果輸入的信息部滿足要求,則提示信息輸入有誤。
  • PHP正則表達式的快速學習方法
    此外,象JavaScript這種客戶端的腳本語言也提供了對正則表達式的支持。由此可見,正則表達式已經超出了某種語言或某個系統的局限,成為人們廣為接受的概念和功能。正則表達式可以讓用戶通過使用一系列的特殊字符構建匹配模式,然後把匹配模式與數據文件、程序輸入以及WEB頁面的表單輸入等目標對象進行比較,根據比較對象中是否包含匹配模式,執行相應的程序。
  • 使用Python驗證常見的50個正則表達式
    什麼是正則表達式?正則表達式(Regular Expression)通常被用來檢索、替換那些符合某個模式(規則)的文本。此處的Regular即是規則、規律的意思,Regular Expression即「描述某種規則的表達式」之意。
  • 經典.NET三層+ASP.NET MVC 5+ADO.NET實現顯示、添加和刪除數據
    ,在日後的大型項目開發中,能更靈活的控制視圖中的數據與數據模型中的數據交互。04第4節:視圖模型ASP.NET MVC 5中,視圖模型主要在視圖中使用,具有模型驗證功能。視圖模型放在MVC項目UI層的Models文件夾下。視圖模型中的數據也是來自數據模型,只不過,視圖模型中的數據是根據視圖需要而組建的,視圖模型中的數據可能是來自一張表,也可能是來自多張表。且還可以在視圖模型中做一些簡單的數據轉換。
  • Python驗證常見的50個正則表達式,代碼拿走就用
    什麼是正則表達式?正則表達式(Regular Expression)通常被用來檢索、替換那些符合某個模式(規則)的文本。此處的Regular即是規則、規律的意思,Regular Expression即「描述某種規則的表達式」之意。
  • Python正則表達式急速入門
    正則表達式在程序開發中會經常用到,比如數據(格式)驗證、替換字符內容以及提取字符串內容等等情況都會用到,但是目前許多開發人員對於正則表達式只是處於了解或者是基本會用的階段。一旦遇到大批量使用正則表達式的情況(例如網絡爬蟲)可以說基本上就抓瞎了。這篇文章我將帶領大家利用 Python 來學習一下正則表達式。
  • C++ 中三種正則表達式比較(C regex,C ++regex,boost regex)
    <<endl;    return 0 ;}使用正則表達式可簡單的分成幾步:1.編譯正則表達式2.執行匹配3.釋放內存首先,編譯正則表達式int regcomp(regex_t *preg, const char *regex, int cflags);reqcomp
  • 運用ASP調用資料庫中視圖及存儲過程
    首頁 > 語言 > 關鍵詞 > asp最新資訊 > 正文 運用ASP調用資料庫中視圖及存儲過程
  • 使用.NET正則表達式區分中英文
    摘要:本文提供一個簡單的範例:使用.NET正則表達式實現中英文的區別。具體需求就是把一個字符串中的中英文分開表示。.NET正則表達式:情景描述這是一個網友的提問,要求如下:給出一個字符串,如「中國China我愛你I love you」,程序可以實現中英文的區別;識別結果如下:共四個元素中國China我愛你I love you.NET正則表達式解決代碼這種問題,天生就是給正則表達式準備的
  • 在laravel中怎樣創建視圖和模型?
    在上一篇文章中,我們介紹了在laravel中如何創建控制器,實現了MVC模型三部曲的第一步,今天我們來學習第二步和第三步——創建視圖和模型。一、模型的創建在MVC中,模型一般都是用來做數據處理的,在laravel中模型是直接放在App目錄下的,所以在模型中,命名空間就直接這樣寫:namespace App;在APP目錄下,我們直接新建一個php文件,模型的命名直接寫:名字+「.php」;例如: