iT邦幫忙

DAY 25
0

在錯誤中學習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


上一篇
認識Model - 使用MetaData設定欄位資訊與驗證
下一篇
認識Model - Model Binding
系列文
在錯誤中學習ASP.NET MVC30

尚未有邦友留言

立即登入留言