2011-01-20 130 views
32

使用MVC3,您有两种用于添加自定义验证的新机制。这些是(1)子类ValidationAttribute或(2)实现IValidatableObject。MVC3中的IValidatableObject - 客户端验证

ValidationAttribute允许您通过实现IClientValidatable(并通过jQuery注册新的适配器和方法)相对简单地添加客户端验证。

IValidatableObject更适合于一次性验证要求,其中重用不是一个选项。它还导致代码更简单。因此,我会选择一些场景。不幸的是,我没有看到使用这种方法实现客户端验证的简单方法。

所以问题是我错过了什么,以及如何在使用IValidatableObject时获得JS验证?

回答

23

因为我没有得到一个(有效的)答案,所以我问了一些来自微软的人,他们确认目前不可能。

布拉德·威尔逊:

在这个时候,唯一的财产水平的验证可以发出客户端 验证(为线,在浏览器中的表单的输入 验证的想法了好多.. 。从浏览器的角度来看,没有“模型”来说 )。

斯图尔特韭菜:

我不相信你可以连接客户端验证与 IValidatableObject

4

http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx http://blogs.msdn.com/b/stuartleeks/archive/2010/07/28/asp-net-mvc-adding-client-side-validation-to-validatepasswordlengthattribute-in-asp-净MVC-3-预览1.aspx

ASP.NET MVC 3,现在荣誉的 IValidateObject接口时,模型 结合(除了所有 其他验证已靠近它 与MVC 2的支持),并且将 从中检索到验证错误和 自动标记/突出显示影响 字段使用内置的HTML表单助手来隐藏视图。

ASP.NET MVC 3还引入了一个新的 IClientValidatable接口, 允许ASP.NET MVC在 运行时验证是否具有客户端验证 支持探索。该接口已被设计为使其可以与多种 验证框架集成。 MVC 3还推出了一个新的IMetadataAware 界面,该界面简化了您如何为ModelMetadata 创建过程作出贡献。

+2

这是所有涉及到增加客户端验证,以验证其属性作为我说在我的问题中,工作得很好。我正在询问是否将客户端验证添加到IValidatableObject。 – 2011-01-20 15:26:50

0

这个article描述了一种访问ASP.NET MVC中客户端验证中的容器对象的方法。你可以使用这个来开始使用你自己的客户端验证

+1

同样,这与数据注释有关,并且是MVC2特定的。在MVC3(IClientValidatable)中为基于属性的验证添加客户端验证的机制完全不同,它比旧的DataAnnotationsModelValidator方法更易于实现。但是,我不是在谈论属性,我正在谈论其他MVC3验证方式:IValidatableObject。 – 2011-01-27 11:51:58

+0

@PaulHiles - 嗨保罗,你有没有找到任何适合客户端验证mvc的东西? – 2014-09-11 04:46:24