2011-03-24 127 views
1

应用程序中的每个表单都有一组单选按钮。一旦选定,只有与该单选按钮相关的某些字段需要验证。MVC3有选择地验证客户端

我使用的是MVC 3,需要验证才能运行客户端。

  1. 只需使用DataAnnotations我只能验证窗体上的所有字段。

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

  3. IClientValidatable看起来像它可能做的工作,但似乎我将不得不为每个标准的DataAnnotation属性编写一个新的属性。

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

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

  6. 我仍然可以使用MVC3验证,但随后使用jQuery从验证中添加/删除验证字段,无论何时选择单选按钮?

如果任何人都可以提出一些建议,以接近这一点的最好办法帮助,这将是大加赞赏。

回答

3

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

例如$('input')。attr('disabled','disabled');

1

对于复杂的验证,最好手工编写这些代码。 数据注释非常适合您90%的验证需求,但会对What/If场景造成不利影响。

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

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

使用IClientValidatable是伟大的,如果你有可重复使用的自定义验证,但它是浪费时间一次性验证。

或者使用RemotValidation和使多个字段无效的CustomValidation属性。