C# 什么时候应该使用远程属性与自定义属性

C# 什么时候应该使用远程属性与自定义属性,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,若我并没有弄错的话,远程属性Validate在值更改时执行,所以它不需要您按Submit键,但自定义属性要求我们编写JQuery来调用适配器 所以我的问题是为什么不一直使用远程属性 远程属性的主要目的是在控制器中执行验证逻辑,同时保持在同一页面上。它通常在需要访问外部资源时使用(例如,在注册时检查新用户是否未使用现有用户名),但也可能是因为逻辑太复杂,不值得在客户端脚本中复制/维护它 >关于代码>远程属性>代码>的两个重要事项。 它使用ajax调用服务器端方法。最初 ajax调用是在.blur

若我并没有弄错的话,远程属性Validate在值更改时执行,所以它不需要您按Submit键,但自定义属性要求我们编写JQuery来调用适配器


所以我的问题是为什么不一直使用远程属性

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

>关于代码>远程属性>代码>的两个重要事项。

  • 它使用ajax调用服务器端方法。最初 ajax调用是在
    .blur()
    事件中编辑控件后进行的, 但此后在每个
    .keyup()
    事件上使用
    RemoteAttribute
    将对性能产生影响
  • 它只提供客户端验证(应该只提供 这被认为是一个不错的奖励),然后您仍然需要实现服务器 通过传递客户端来防止恶意用户的端验证 侧面验证
  • 如果您编写的自定义验证属性可以使用javascript执行验证逻辑,那么您的属性应该继承自
    ValidationAttribute
    ,并实现
    IClientValidatable
    (并包括添加客户端规则所需的脚本)因此,您可以同时获得客户端和服务器端验证,而无需对服务器进行不必要的调用


    请参阅一篇关于实现自定义验证属性的好文章。

    RemoteAttribute
    用于调用控制器方法来执行验证。如果可以使用javascript(出于性能原因)在客户端上执行验证,则您不会这样做。请确保您的说法是正确的,但我指的是带有客户端验证的CustomAttribute。抱歉,我不理解您的评论。如果自定义ValidationAttribute实现了
    IClientValidable
    ,则向
    jQuery.validator
    添加必要的方法,以便在客户端上执行客户端验证。使用
    RemoteAttribute
    只会显著降低性能(并且不会给您最重要的服务器端验证),现在它是有意义的,如果您将其作为答案,我会将其标记为答案