Добавление задержки к атрибуту удаленной проверки MVC3 - PullRequest
5 голосов
/ 17 ноября 2011

У меня есть senario, где я должен проверить наличие имени пользователя в базе данных при выполнении страницы регистрации.для этого я реализовал удаленный атрибут для удаленной проверки в моей модели

[Remote("CheckUserNameAvaliable", "User", Httpmethod="Post")]
public string Username {get; set;}

, и мой метод выглядит следующим образом

[HttpPost]
public JsonResult CheckUserNameAvaliable(string UserName)
{
    SessionUser currentUser = this.sessionHelper.GetCurrentUser();
    User user = this.userService.GetByUsername(UserName);
    if (user != null && user.Id != currentUser.Id)
    {
        return Json(false);
    }

    return Json(true);
}

Он прекрасно работает для меня, но проблема в том, что всякий раз, когдамы сделали ключ к текстовому имени пользователя, он будет подавать эту удаленную проверку, но в соответствии с моим требованием я должен запустить эту удаленную проверку только после ввода значения в текстовое поле имени пользователя.Для этого можем ли мы принудительно добавить задержку к атрибуту удаленной проверки?

Кто-нибудь знает, как добавить задержку к удаленной проверке в MVC3?

Ответы [ 3 ]

3 голосов
/ 10 февраля 2012

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;
        }
    });
2 голосов
/ 17 ноября 2011

До этого я сталкивался с подобными проблемами с MVC3 и удаленной проверкой.Думаю, вы хотите, чтобы событие запускалось при размытии, но не знаете, как сообщить удаленной проверке, что ..

Надеюсь, это поможет

Удаленная проверка ASP.NET только при размытии

0 голосов
/ 17 ноября 2011

Если вы не хотите проверять на keyup, но на размытие, то это то, что вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...