MVC3 использует плагин jquery.validate в браузере. С jquery.validate проверка поля не начинается до первого изменения и размытия поля или после отправки, если поле не было затронуто.
Как только проверка поля начинается для поля, настройка onkeyup валидатора контролирует, выполняется ли проверка для каждого события keyup. Если вы выполняете удаленную проверку поля при каждом нажатии клавиши, возможно, он отправляет слишком много сообщений Ajax, подчеркивая как клиента, так и сервер.
Как упоминали другие респонденты, вы можете подавить проверку keyup, установив validator.settings.onkeyup = false, но это подавляет проверку onkeyup во всех полях формы, а не только в тех, которые имеют правило удаленной проверки. Я предлагаю, чтобы вы подавили keyup, когда поле с удаленной проверкой имеет фокус, а затем включили его снова, когда вы размыли поле.
Подавить onkeyup легко. Проблема в том, что изменение настройки с false на true не приводит к включению этой функции. Чтобы снова включить его, необходимо установить для него функцию, определенную по умолчанию для объекта $ .validator.
Вот код JavaScript, который нужно включить на страницу, если вы используете ненавязчивую проверку MVC. Он будет охватывать все формы на вашей странице. И обязательно используйте jquery.validate версии 1.9.0 или новее, поскольку более ранние версии не работают должным образом с IE 7 или 8 (да, я тоже должен поддерживать этих пользователей):
$("form input[data-val-remote-url]").on({
focus: function () {
$(this).closest('form').validate().settings.onkeyup = false;
},
blur: function () {
$(this).closest('form').validate().settings.onkeyup =
$.validator.defaults.onkeyup;
}
});