poniedziałek, 9 kwietnia 2012

Sprawdzenie czy login został już zajęty - atrybut Remote

W ASP.MVC 3 wykorzystano tzw. Unobtrusive JavaScript. W skrócie jest zbiór zasad, jak budować strony z wykorzystaniem JavaScript.

Mój scenariusz przewiduje tworzenie konta użytkownika. W bazie danych login jest polem unikalnym, co znaczy że nie może być dwóch użytkowników o takim samym loginie, czy też takim samym mailem. Standardowo walidacja przeprowadzana jest na serwerze, chciałem także, aby użytkownik został od razu poinformowany podczas wprowadzania loginu że jest on zajęty.
W MVC 3 jest to niezwykle proste.
Na początek w modelu, dodaję do właściwości UserName dodaję atrybut Remote:

Code:
        [Required]
        [Display(Name = "Nazwa użytkownika")]
        [Remote("IsUserExistInDatabase", "Account", HttpMethod = "POST", ErrorMessage = "Taki użytkownik już istnieje. Proszę wybrać inny login.")]
        public string UserName { get; set; }

Elementami składowymi są kolejno:
  • IsUserExistInDatabase - nazwa metody (akcji) która zostanie wywołana podczas walidacji
  • Account - nazwa kontrolera w którym akcja walidacji się znajduje
  • HttpMethod - w jaki sposób ma zostać wysłane zapytanie do kontrolera
  • ErrorMessage - komunikat błędu który ma zostać wyświetlony użytkownikowi w przypadku gdy walidacja nie przejdzie pomyślnie
Następnie w widoku dodajemy odnośniki do skryptów z walidacją:

Code:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

Teraz pozostaje jeszcze ustalić w którym miejscu widoku ma zostać wyświetlony komunikat z błędem odnośnie loginu:

Code:
@Html.ValidationMessageFor(x => x.UserName)

Ostatnia czynność to napisanie metody w wskazanym kontrolerze, która jako parametr przyjmuje wartość naszego pola, a jako rezultat zwraca Json:

Code:
        [HttpPost]
        public JsonResult IsUserExistInDatabase(string username)
        {
            var user = Membership.GetUser(username);

            return Json(user == null);
        }

Ot tyle, aby uzyskać walidację istnienia loginu.

Brak komentarzy:

Prześlij komentarz