在錯誤中學習ASP.NET MVC 第 25 篇 - 識Model - 自訂欄位驗證

 如果mvc內建的欄位驗證不符合需求時,也是可以動手自己寫驗證的喔!以下就以驗證使用者輸入的名稱是否為A字母開頭為例子,分別以實作IValidatableObject介面與繼承ValidationAttribute兩種方式說明



實作IValidatableObject介面

  1. 首先開啟昨天定義的partial class ,並實作IValidatableObject介面



  2. 在IValidatableObject文字上按滑鼠右鍵選擇實作介面



  3. 透過上述步驟產生Validate方法



4.將驗證的邏輯寫在裡面,例如我要判斷名稱是否以A字母回開頭,若沒有則回傳錯誤訊息



5.瀏覽User/Create,輸入Eve按下Create按鈕,畫面就出現錯誤訊息了,而這個錯誤訊息是透過 @Html.ValidationSummary顯示



6.如果今天想要讓錯誤訊息透過@Html.ValidationMessageFor(model => model.Name)顯示,就必須在ValidationResult傳入第二個參數,是一個string陣列,在這邊標示屬性名稱,當驗證錯誤時,就會把錯誤訊息丟到這些屬性裡面







繼承ValidationAttribute

1.建立StartsWithAAttribute類別(.cs)
繼承ValidationAttribute,如果顯示override的方法,請打override後再打一個空白就可以看到提示,並將判斷的邏輯寫下來,其中的FormatErrorMessage是根據發生錯誤所在的資料欄位,將格式套用至錯誤訊息,我們可以在套用DataAnnotations屬性時將ErrorMessage定義好



2.套用StartsWithA,定義ErrorMessage



3.瀏覽User/Create,輸入Eve,按下Create就報錯了



以前不知道可以自訂驗證,所以都只能用內建的驗證屬性去判斷,其他的判斷都是要自己寫JavaScript判斷,超累的,而且有些部分還要等到寫入資料庫前才能判斷,等到發現問題想顯示錯誤訊息,通常也只是顯示一段文字,很難跟Razor去做互動,例如把錯誤訊息顯示在對應的欄位旁邊,到最近才知道可以自訂驗證訊息之後就超方便的啦~~~

下載今日專案: https://github.com/juben-wang/MvcApplication25

留言

這個網誌中的熱門文章

CPE 一顆星選集題目說明與解答 - Java 筆記與心得分享

Visual Studio 自動排版格式化程式碼

1. Vito's family (CPE10406, UVA10041) - CPE一顆星解答與說明