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

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

咱們能夠經過使用HtmlHelper中的方法及在頁面中引用js庫對Model的屬性的數據註解(System.ComponentModel.DataAnnotations命名空間下的一組類)進行解析,實現前端、後端的數據驗證;html

HtmlHelper、數據註解在其餘文章中再詳細介紹,本文主要介紹如何使數據驗證發生做用。前端

 

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

1、服務器端驗證web

要實現服務器端的驗證很是簡單,只須要知足下面三個條件:ajax

①有數據註解後端

②頁面部分使用HtmlHelper生成各類表單元素服務器

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

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

③在後端代碼中指明須要驗證性能

 

可是隻有服務器端的驗證不能知足咱們,由於每一次的錯誤數據都會提交到服務器,不只影響了性能,用戶體驗也差強人意。

 

2、客戶端驗證

客戶端驗證是經過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(默認存在)

 

 

3、總結

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

也有的驗證可能仍是須要在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)顯示屬性的數據註解的錯誤消息;

相關文章
相關標籤/搜索