2011-11-17 18 views
5

Mam senario, w którym muszę sprawdzić obecność użytkownika w bazie danych podczas rejestracji. Do tego wdrożyliśmy zdalnego Atrybut zdalnego sprawdzania poprawności w moim modeluDodawanie opóźnienia do atrybutu Zdalna walidacja MVC3

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

i moja metoda wygląda następująco

[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); 
} 

To działa dobrze dla mnie, ale problemem jest to, że kiedy zrobiliśmy klucz na nazwę użytkownika pole tekstowe będzie to zdalne sprawdzanie poprawności, ale zgodnie z moim wymaganiem muszę odpalić to zdalne sprawdzanie poprawności tylko po wprowadzeniu wartości w polu Nazwa użytkownika pole tekstowe. W tym celu możemy z całą mocą dodać opóźnienie do atrybutu zdalnego sprawdzania poprawności?

Czy ktoś wie, jak dodać opóźnienie do zdalnego sprawdzania poprawności w MVC3?

Odpowiedz

2

I zostały złowione na podobne problemy, zanim z MVC3 i zdalnego sprawdzania poprawności. Zgadnij chcesz zdarzenia na ogień na rozmycie ale nie wiem, jak chcesz powiedzieć, że zdalne sprawdzanie ..

Mam nadzieję, że to pomoże

ASP.NET Remote Validation only on blur?

+0

Odpowiedź jest dobra, ale problem polega na tym, że ustawienie jest globalne, ale jeśli chcesz go określić tylko na określonej stronie, to wydaje mi się, że jest to dość dziwne. –

+1

Możesz umieścić go na selektorze: $ (". Selector"). Validate ({onkeyup: false}); –

0

Jeśli nie chcesz, aby potwierdzić na keyup ale na rozmycie następnie this to, co chcesz

+0

odpowiedź jest dobra, ale problem polega na tym, że ustawienie globalne, ale jeśli chcesz określić go na konkretnej stronie, to jest to dość dziwne. –

3

MVC3 używa wtyczki jquery.validate w przeglądarce . W przypadku jquery.validate sprawdzanie poprawności pól rozpoczyna się dopiero po pierwszej zmianie i rozmyciu pola lub po przesłaniu, jeśli pole nie zostało dotknięte.

Po rozpoczęciu sprawdzania poprawności pola dla pola, ustawienie onkeyup walidatora określa, czy sprawdzanie poprawności jest wykonywane dla każdego zdarzenia kluczowania. Jeśli wykonujesz zdalną walidację na polu przy każdym naciśnięciu klawisza, prawdopodobnie wysyła on zbyt wiele wiadomości ajaxowych, podkreślając zarówno klienta, jak i serwer.

Jak wspomnieli inni respondenci, można pominąć sprawdzanie poprawności przez ustawienie validator.settings.onkeyup = false, ale to pomija weryfikację onkeyup na wszystkich polach formularzy, a nie tylko tych ze zdalną regułą walidacji. Sugeruję, że pomijasz klawiszowanie, gdy pole ze zdalnym sprawdzaniem poprawności ma fokus, a następnie włącz go ponownie po rozmyciu pola.

Tłumienie onkeyup jest łatwe. Problem polega na tym, że zmiana ustawienia z false na true nie włącza ponownie funkcji. Aby z powrotem go włączyć, musisz ustawić go na funkcję zdefiniowaną w domyślnych ustawieniach obiektu $ .validator.

Oto kod javascript, który należy umieścić na stronie, jeśli używasz MVC dyskretnej weryfikacji. Obejmuje wszystkie formularze na twojej stronie. I pamiętaj, aby używać jquery.validate wersji 1.9.0 lub nowszej, bo wcześniej wersje nie działają poprawnie z IE 7 lub 8 (tak, mam na wsparcie tych użytkowników zbyt):

$("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; 
     } 
    }); 
Powiązane problemy