在錯誤中學習ASP.NET MVC 第 25 篇 - 識Model - 自訂欄位驗證
如果mvc內建的欄位驗證不符合需求時,也是可以動手自己寫驗證的喔!以下就以驗證使用者輸入的名稱是否為A字母開頭為例子,分別以實作IValidatableObject介面與繼承ValidationAttribute兩種方式說明
實作IValidatableObject介面
首先開啟昨天定義的partial class ,並實作IValidatableObject介面
在IValidatableObject文字上按滑鼠右鍵選擇實作介面
透過上述步驟產生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去做互動,例如把錯誤訊息顯示在對應的欄位旁邊,到最近才知道可以自訂驗證訊息之後就超方便的啦~~~
留言
張貼留言