2010-04-22 61 views
4

The Gu provides an example你如何創建一個自定義驗證器來覆蓋RegularExpressionAttribute。自定義數據註釋Validator派生自RegularExpressionAttribute

這樣做的好處是,你不必create a custom Model Validator但我不能得到它的工作。

考慮下面的代碼:

public class NameAttribute : RegularExpressionAttribute { 
    public NameAttribute() 
     : base(@"^[\w\s\-\']+$") { 
    } 
} 

這工作:

[RegularExpression(@"^[\w\s\-\']+$")] 

但這並不:

[Name] 

有我誤解了斯科特的例子的一個方面或者是例子有缺陷,因爲MVC不支持派生類型,所以實際上我必須創建一個對應的onding ModelValidator?

回答

10

破解了!將以下內容添加到Global.asax.cs中Application_Start()

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(NameAttribute), typeof(RegularExpressionAttributeAdapter)); 
+0

+1我正要生氣! – Jonathan 2011-01-17 17:30:37

+0

太棒了!生氣了! – mateuscb 2011-10-05 14:45:03

1

如果你想要一個客戶端驗證,你應該註冊一個服務器端適配器進行遠程驗證。

在這裏看到: http://msdn.microsoft.com/en-us/magazine/ee336030.aspx

這裏: http://bradwilson.typepad.com/blog/2010/01/remote-validation-with-aspnet-mvc-2.html

+0

我給人的印象是,我會得到這個開箱即用的,因爲我是從內置屬性繼承的。這不是這種情況嗎? – kim3er 2010-04-22 09:40:04

+0

不幸的是它不是那麼容易=( 我認爲你應該至少在global.asax – 2010-04-22 09:45:47

+0

+1中添加DataAnnotationsModelValidatorProvider.RegisterAdapter()啊,非常好,剛剛得出完全相同的結論,當我有更多的時間,我想我會看看擴展默認工廠以包含派生類型 – kim3er 2010-04-22 09:55:27