【问题标题】:MVC3 selectively validate client sideMVC3 选择性地验证客户端
【发布时间】:2011-03-24 21:33:05
【问题描述】:

应用程序中的每个表单都有一组单选按钮。选择后,仅需要验证与该单选按钮关联的某些字段。

我正在使用 MVC 3,需要验证才能在客户端工作。

  1. 仅使用 DataAnnotations 我只能验证表单上的所有字段。

  2. IValidatableObject 在客户端不起作用。

  3. IClientValidatable 看起来可以完成这项工作,但似乎我必须为每个标准 DataAnnotation 属性编写一个新属性。

  4. RemoteValidation 一次只处理一个字段。

  5. 另一种选择是放弃 MVC3 验证并使用 jQuery 完成所有操作。我对此没有问题,但想使用 MVC3 并减少编码/维护,为更大的项目做准备。

  6. 我是否仍然可以使用 MVC3 验证,然后在选择单选按钮时使用 jQuery 从验证中添加/删除验证字段?

如果有人可以就解决此问题的最佳方法提供一些建议,将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    MVC 3 默认使用 jQuery 的验证插件,该插件不会验证禁用的字段。如果选择了某些单选按钮,是否不再需要您不想验证的字段?如果是这样,那么您可以禁用这些元素并且它们不会被验证(请注意,这些禁用的字段也不会发布到服务器)。

    例如

    $('input').attr('disabled', 'disabled');

    【讨论】:

      【解决方案2】:

      对于复杂的验证,最好手动编写这些代码。 数据注释可以很好地满足您 90% 的验证需求,但在 What/If 场景中却失败了。

      对于客户端,使用通过 jQuery Validation Plugin 呈现的事件驱动的自定义验证。对于服务器,使用 CustomValidation 属性:

      http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute(v=vs.95).aspx

      如果您有可重用的自定义验证,则使用 IClientValidatable 非常好,但是一次性验证会浪费时间。

      或者将 RemotValidation 与使多个字段无效的 CustomValidation 属性一起使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        相关资源
        最近更新 更多