ASP.NET MVC 4表对象调用频率/时间

ASP.NET MVC 4表对象调用频率/时间,asp.net,asp.net-mvc-4,Asp.net,Asp.net Mvc 4,我试图理解客户端和服务器之间在IValidatableObject上下文中的通信 我有一个ViewModel,其中有一个属性,CompanyId,上面装饰着[Remote(“ValidateCompanyId”,“Home”)] 当然,在我的“家庭”控制器中,我有ValidateCompanyId操作 视图中有一个CompanyId文本框。当视图第一次显示时,我可以在文本框中输入我想要的内容,并且与服务器没有交互。当文本框失去焦点时,将调用ValidateCompanyId操作。如果验证失败,我

我试图理解客户端和服务器之间在IValidatableObject上下文中的通信

我有一个ViewModel,其中有一个属性,
CompanyId
,上面装饰着
[Remote(“ValidateCompanyId”,“Home”)]

当然,在我的“家庭”控制器中,我有ValidateCompanyId操作

视图中有一个CompanyId文本框。当视图第一次显示时,我可以在文本框中输入我想要的内容,并且与服务器没有交互。当文本框失去焦点时,将调用ValidateCompanyId操作。如果验证失败,我会在视图中返回错误消息。到目前为止,一切顺利

然而,在这一点上,随后的每一次击键都会调用服务器。例如,如果我最初键入了8500并得到一个错误,如果我想将我的值更改为8200,我会看到服务器调用850,然后是85,然后是8,然后是82,然后是820,最后是8200


我想我更喜欢验证调用等待文本框再次失去焦点(就像它一开始那样)。特别是在这种情况下,因为验证需要数据库调用。什么控制这一点?

这是默认行为。在字段被标记为无效之前,验证是惰性的,允许您通过制表符遍历控件,但一旦它被标记为无效,它就会被急切地验证()。您可以使用以下脚本阻止对
keyup
进行验证

var validator = $("form").data("validator");
if (validator) {
  validator.settings.onkeyup = false;
}
注意:这将禁用所有控件的
keyup
验证。如果您只想将其用于一个控件,请尝试(未测试)


我测试了这两种方法,它们都有效。
$(yourSelector).keyup(function() { return false } );