mvc中服務器端、客戶端屬性驗證


mvc中使用表單進行數據提交時,數據驗證分為服務器端驗證和客戶端驗證;

我們可以通過使用HtmlHelper中的方法及在頁面中引用js庫對Model的屬性的數據注解(System.ComponentModel.DataAnnotations命名空間下的一組類)進行解析,實現前端、后端的數據驗證;

HtmlHelper、數據注解在其他文章中再詳細介紹,本文主要介紹如何使數據驗證發生作用。

 

下面分別介紹兩種驗證方式:

一、服務器端驗證

要實現服務器端的驗證非常簡單,只需要滿足下面三個條件:

①有數據注解

②頁面部分使用HtmlHelper生成各種表單元素

使用這些html標簽的時候,需要引用一下mvc工程中的css文件:

<link href="~/Content/Site.css" rel="stylesheet" />

③在后端代碼中指明需要驗證

 

但是只有服務器端的驗證不能滿足我們,因為每一次的錯誤數據都會提交到服務器,不僅影響了性能,用戶體驗也差強人意。

 

二、客戶端驗證

客戶端驗證是通過jquery validate插件進行數據驗證的,它需要有jquery的支持,因此在引用它之前必須引用jquery文件。

jquery validate是需要在js中編寫相關代碼(如下圖),才能實現數據驗證的;

 

但這樣子也是挺麻煩的,我們在屬性寫的數據注解豈不是沒什么卵用了,不用擔心,只要我們引用一下mvc工程中的 jquery.validate.unobtrusive.js 就可以啦。

 

利用mvcHtmlHelper中類似Html.EditorFor(m => m.Name)這樣的語法,生成的代碼如下:

<input class="text-box single-line" data-val="true" data-val-required="請輸入用戶名!" id="Name" name="Name" type="text" value="">

這樣子,引用的js庫就可以解析以data-val-為前綴的屬性用來設置驗證規則了。data-val="true"表示對用戶輸入的值進行驗證。

 

如果上面的js庫你都引用了,但客戶端的驗證還是沒有起效,那就檢查一下配置文件吧。在配置文件中,有兩個選項是需要配置為true的,建立mvc應用程序的時候,默認是已經添加了的。

第一行表示啟用客戶端驗證;

第二行表示啟用unobtrusive相關的js驗證,在使用AjaxHelper,引用jquery.unobtrusive-ajax.js時,也需要該配置為true

 

綜上所述,客戶端的驗證需要滿足以下幾個條件:

①有數據注解

②頁面部分使用HtmlHelper生成各種表單元素

③引用相關js文件,如下圖:

④配置web.config(默認存在)

 

 

三、總結

在實際開發中,基本都是客戶端驗證+服務器端驗證一起使用的;

也有的驗證可能還是需要在js中實現,那么在進行后端驗證時,就不能只以ModelState.IsValid為參考了,還需要寫額外代碼驗證;如果有錯誤的時候,可以使用ModelState.AddModelError("key", "errorMesaage");//第一個參數是key,第二個參數是要顯示的錯誤消息

 

在頁面中展示后台的錯誤消息的時候,有兩種方式:

Html.ValidationSummary(true)

ValidationSummary有幾種重載形式:

重載形式

說明

Html.ValidationSummary() 

匯總顯示所有的驗證錯誤

Html.ValidationSummary(bool)

如果bool參數=true,只顯示Model層次的錯誤,否則所有的驗證錯誤都顯示

Html.ValidationSummary(string) 

在所有錯誤消息之前再顯示string給出的字符串

Html.ValidationSummary(bool, string) 

同Html.ValidationSummary(bool),只是在錯誤消息前多顯示string給出的字符串

 

在頁面數據提交到后台時,表明屬性的數據注解驗證已經通過了,因此前端顯示錯誤消息的時候只會顯示 ModelState.AddModelError()方法中的錯誤消息;

在頁面中會生成如下圖所示的div

ValidationSummary方法會展示所有的錯誤消息,而不會根據key值顯示特定的消息;主要用來匯總顯示從后台返回的錯誤消息列表。

 

②Html.ValidationMessage(key)

該方法會根據ModelState.AddModelError("key", "errorMesaage")里的key值顯示對應的錯誤消息;

它在前端生成的是一個span標簽;

不過通常不會使用該方法,而是使用Html.ValidationMessageFor(c => c.Name)顯示屬性的數據注解的錯誤消息;


免責聲明!

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



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