ASP .NET MVC 4 IValidatableObject调用频率/时间

时间:2014-10-06 16:14:43

标签: asp.net asp.net-mvc-4

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

我有一个ViewModel,其中一个属性CompanyId,用[Remote("ValidateCompanyId", "Home")]修饰。

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

该视图具有CompanyId的文本框。首次显示视图时,我可以在文本框中输入我想要的内容,并且不与服务器进行交互。当文本框失去焦点时,将调用ValidateCompanyId操作。如果验证失败,我会在视图中返回错误消息。到现在为止还挺好。

然而,此时,每次后续击键都会调用服务器。例如,如果我最初键入8500并且出错,如果我想将我的值更改为8200,我看到服务器调用850,然后是85,然后是8,然后是82,然后是820,最后是8200。 / p>

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

1 个答案:

答案 0 :(得分:1)

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

var validator = $("form").data("validator");
if (validator) {
  validator.settings.onkeyup = false;
}

注意这会禁用所有控件的keyup验证。如果你想要它只用于一个控制尝试(未测试)

$(yourSelector).keyup(function() { return false } );