2010-06-25 77 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