MVC驗證03-自定義驗證規則、禁止輸入某些值

Darren Ji發表於2014-03-04

本文繼續體驗自定義驗證規則,需求是禁止輸入某些值。本文與前2篇相關,請參考:
MVC驗證01-基礎、遠端驗證  
MVC驗證02-自定義驗證規則、郵件驗證 

 

  自定義驗證特性繼承ValidationAttribute,並實現IClientValidatable介面

MVC驗證03-自定義驗證規則、禁止輸入某些值展開

  把自定義屬性打到View model的屬性上

MVC驗證03-自定義驗證規則、禁止輸入某些值展開

[NoInput("demo",ErrorMessage = "不能使用此名稱")],即當輸入demo的時候就報錯。

  擴充套件jquery的驗證方法jQuery.validator.noinput.js並註冊

jquery的驗證擴充套件方法的邏輯基本上與自定義特性IsValid()方法一致。
自定義特性rule.ValidationParameters["input"]的鍵input要傳遞給$.validator.unobtrusive.adapters.addSingleVal()方法。

MVC驗證03-自定義驗證規則、禁止輸入某些值展開

  Register.cshtml檢視

MVC驗證03-自定義驗證規則、禁止輸入某些值展開

效果:

禁止輸入某個值

 

  如果需要禁止多個值,需要重寫自定義驗證特性

這時候自定義特性的Input屬性型別變成了string[],因為要判斷多個值。
但前臺rule.ValidationParameters["input"]儲存的應該是string型別,所以儲存的時候要把Input陣列元素join起來。

MVC驗證03-自定義驗證規則、禁止輸入某些值展開

  把自定義屬性打到View model的屬性上,但建構函式是用逗號分隔的字串

MVC驗證03-自定義驗證規則、禁止輸入某些值展開

[NoInput("demo,jack",ErrorMessage = "不能使用此名稱")],當輸入demo或者jack的時候都會報錯。

 

  擴充套件jquery的驗證方法jQuery.validator.noinput1.js並註冊

需要把rule.ValidationParameters["input"]儲存的值split成陣列,在遍歷判斷。

MVC驗證03-自定義驗證規則、禁止輸入某些值展開

  Register.cshmtl要引用jQuery.validator.noinput1.js

MVC驗證03-自定義驗證規則、禁止輸入某些值展開

效果:

禁止輸入某些值

相關文章