【问题标题】:IValidatableObject in MVC3 - client side validationMVC3 中的 IValidatableObject - 客户端验证
【发布时间】:2011-01-20 15:04:42
【问题描述】:

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

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

IValidatableObject 更适合不能重用的一次性验证要求。它还导致代码更简单。因此,在许多情况下,这将是我的选择。不幸的是,我没有看到使用这种方法实现客户端验证的简单方法。

所以问题是我缺少什么以及在使用 IValidatableObject 时如何获得 JS 验证?

【问题讨论】:

    标签: validation asp.net-mvc-3 client-side-validation


    【解决方案1】:

    由于我在这里没有得到(有效的)答案,我问了几个微软的人,他们确认目前不可能。

    布拉德·威尔逊:

    目前,只有属性级别的验证器可以发出客户端 验证(因为这更符合输入的想法 以浏览器的形式进行验证……没有“模型”可言 的,从浏览器的角度来看)。

    斯图尔特韭菜:

    我不相信您可以将客户端验证与 IValidatableObject

    【讨论】:

    • 这是否意味着没有简单的方法可以在视图上挂钩自定义 javascript 验证?我想要一个简单的函数,可以插入到现有的客户端验证机制中。
    • An ASP.NET forums post: 目前jquery验证只验证输入字段(没有模型级验证),所以类级验证没有自然映射。添加模型级别验证的常用方法是添加隐藏字段,并将模型级别验证映射到隐藏字段。 stackoverflow.com/a/5817958/11683 演示了这种方法 - 除了该字段未隐藏。
    • 在模型上使用 [Remote] 属性可能会有所帮助;在这里阅读更多:msdn.microsoft.com/en-us/library/gg508808%28VS.98%29.aspx
    【解决方案2】:

    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-net-mvc-3- preview-1.aspx

    ASP.NET MVC 3 现在支持 模型时的 IValidateObject 接口 绑定(除了所有的 其他验证方法已经 支持 MVC 2),并且将 从中检索验证错误并 自动标记/突出显示受影响 视图中的字段使用 内置 HTML 表单助手。

    ASP.NET MVC 3 还引入了一个新的 IClientValidatable 接口 允许 ASP.NET MVC 在 运行时验证器是否有 支持客户端验证。这 界面的设计使其 可以与各种集成 验证框架。 MVC 3 也 引入了新的 IMetadataAware 界面简化了您的操作 为模型元数据做出贡献 创建过程。

    【讨论】:

    • 这都与将客户端验证添加到验证属性有关,正如我在问题中所说,效果很好。我在询问是否将客户端验证添加到 IValidatableObject。
    【解决方案3】:

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

    【讨论】:

    • 同样,这与数据注释有关,并且是 MVC2 特定的。在 MVC3 (IClientValidatable) 中有一种完全不同的机制可以为基于属性的验证添加客户端验证,这比旧的 DataAnnotationsModelValidator 方法更容易实现。但是,我不是在谈论属性,而是在谈论另一种 MVC3 验证方式:IValidatableObject。
    • @PaulHiles - 嗨 Paul,你有没有在 mvc 中找到适合客户端验证的东西?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多