iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 8
0
Modern Web

從Asp.Net MVC5的起跑點認識現代網站系列 第 8

Day8_Model驗證欄位與自訂驗證

http://ithelp.ithome.com.tw/upload/images/20161223/2010380839tL26AToO.png
一開始產生的edmx資料庫的Project.cs檔看的到這比照Table建出來的.cs檔,但上面註解卻標示不建議修改。
那是因為如果Table改掉之後我們比須更新.edmx檔案,加入新修改的資料庫,那麼這時server會drop掉整個資料庫再重新create一個新的,那麼如果我們把驗證條件打在裡面就會被初始化。

因此我們透過建置一個partial class的方式,並套用MetadataType屬性,將此partical class與entity類別建立關聯。
http://ithelp.ithome.com.tw/upload/images/20161223/201038081eu3QI5hbF.png
step1: 將class名稱改成 partial class,代表Product class分割成兩個檔案,而當我們使用到Product這個class時,所有partial class跟product partial class有建立關聯的都會讀取。

Step2: [MetadataType(typeof(ProductMetaData))]加入這行進行關聯建立

  • using System.ComponentModel.DataAnnotations; 需引入才能使用

Step3: 開始建立ProductMetaData partial class設定欄位驗證條件

常用的欄位驗證屬性

  • Required : 必填欄位
  • StringLeght:字串長度
  • MinLength:最小長度
  • MaxLength:最大長度
  • CreditCard:信用卡格式
  • EmailAddress:信箱
  • RegularExpression:正規表示法
  • Range(num,num):範圍
  • DisplayName: 欄位要顯示的名稱
    http://ithelp.ithome.com.tw/upload/images/20161223/20103808W3368bb4RU.png
    View欄位下加入這段 @Html.ValidationMessageFor(model => model.ProductName, "", new { @class = "text-danger" }),即是顯示錯誤訊息的位置。
    透過Model Binding的驗證模式,使用者在建立產品時,就會判斷資料有沒有符合驗證規則,這樣的方式簡單的限制使用者可能輸入的錯誤訊息。

而我們也可以將更複雜的商業邏輯透過繼承IValidatableObject的方式來進行驗證套用,範例如下
http://ithelp.ithome.com.tw/upload/images/20161223/20103808Gmq6b7bEA3.png
將邏輯套用完之後,輸入會出錯的情況Price>1000&&Stock>100看看結果
http://ithelp.ithome.com.tw/upload/images/20161223/20103808gdMbcs8ply.png
如此一來,欄位驗證的部分就能很輕鬆地透過Model Binding的驗證模式完成了。


上一篇
Day7_Razor進階之表單欄位
下一篇
Day9_Controller傳資料給View的方法(ViewData、ViewBag、TempData)
系列文
從Asp.Net MVC5的起跑點認識現代網站30

尚未有邦友留言

立即登入留言