2010-06-25 76 views
2

下列驗證工作正常,兩個客戶端和服務器端ASP.NET MVC如何獲得自定義驗證與客戶端驗證

<DisplayName("website")> _ 
    <StringLength(256, ErrorMessage:="Web Address cannot exceed 256 characters.")> _ 
    <RegularExpression("^http(s?)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$", ErrorMessage:="Not a valid website address")> _ 
    Public Property WebSite As String 

但是這種驗證只能在服務器端工作

<DisplayName("website")> _ 
    <StringLength(256, ErrorMessage:="Web Address cannot exceed 256 characters.")> _ 
    <Website(ErrorMessage:="Not a valid website address")> _ 
    Public Property WebSite As String 

在哪裏我的自定義WebsiteAttribute看起來像這樣

Public Class WebsiteAttribute : Inherits RegularExpressionAttribute 
    Public Sub New() 
     MyBase.new("^http(s?)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$") 
    End Sub 
End Class 

我顯然缺少someth非常簡單。

在此先感謝。

回答

2

看看Phil Haack的this blog post,它演示瞭如何爲自定義屬性設置客戶端驗證。基本上你需要編寫和註冊一個自定義DataAnnotationsModelValidator<T>

+0

也許這只是因爲我沒有閱讀C#所有這一切,但確實看起來很複雜。 – 2010-06-25 14:46:18

+0

這是唯一的方法。客戶端驗證通過檢查您使用的屬性並生成必要的JavaScript代碼來工作。當您編寫自定義驗證方法時,無法自動生成JavaScript。如果在您的驗證方法中使用了反射或調用外部Web服務來執行驗證呢?您如何期望客戶端驗證自動運行? – 2010-06-25 14:51:32

+0

不,我只是「ASS-umed」,因爲我使用的自定義驗證程序實際上是從基本的REGEX驗證程序派生出來的,所以會有一些汽車魔法可以爲我構建它。如果我仍然需要手動編寫Javascript,那麼使用自定義Regex驗證器來簡化我的服務層驗證是毫無意義的。我只是希望我可以重複使用實際的正則表達式來實現簡單的實現,而無需複製/粘貼。 – 2010-06-25 18:22:12