2016-03-14 40 views
-1

如果我没有弄错,远程属性验证在Value Change上执行,所以它不需要您按Submit,但Custom Attribute要求我们编写JQuery来调用适配器什么时候应该有人使用远程属性与自定义属性

所以我的问题是为什么不使用远程属性所有的时间?

+2

'RemoteAttribute'用于调用控制器方法来执行验证。如果可以在使用javascript的客户端上执行验证,则不会这样做(出于性能原因) –

+0

确定您对此有所了解,但我正在谈论CustomAttribute以及客户端验证。 – Stacker

+0

对不起,我不明白你的意见。如果您的自定义ValidationAttribute实现了'IClientValidatable',那么您将必要的方法添加到'jQuery.validator'中,以便您可以在客户端上执行客户端验证。使用'RemoteAttribute'只会大大降低性能(并不会给你最重要的服务器端验证) –

回答

2

RemoteAttribute的主要目的是在控制器中执行验证逻辑,同时保持在同一页面上。当您需要访问外部资源时,通常会使用它(例如,在注册时检查新用户是否没有使用现有的用户名),但也可能是因为逻辑非常复杂,不值得复制/将其保存在客户端脚本中。

关于RemoteAttribute需要考虑两件重要的事情。

  1. 它使用ajax调用服务器端方法。最初, Ajax调用在.blur()事件编辑控制, 但此后每.keyup()事件,以便使用 RemoteAttribute将是一个性能命中
  2. 它只提供客户端验证(它应该永远只能是 考虑后作出一个不错的奖金),你仍然需要再实现服务器 端验证,以防止恶意用户绕过客户端 端验证

如果你写字的地方可以使用JavaScript执行的验证逻辑自定义验证属性,那么你的属性应该从ValidationAttribute继承,并实现IClientValidatable(并且包含必要的脚本来添加客户端规则),这样你就可以同时获得客户端和服务器端的验证,而不会对服务器进行不必要的调用。

请参阅The Complete Guide to Validation in ASP.NET MVC 3 - Part 2了解实现自定义验证属性的好文章。

相关问题