Generowanie unobtrusive validation bez formy w MVC 3

1

W ASP.MVC 3 dodano bardzo przyjemną walidację danych po stronie klienta, która nie miesza w htmlu jak Gargamel w wielkim garze pełnym wypatroszonych kwiczących smerfów. Wszystkie dane chowa w atrybutach ("data-*" zgodnych z HTML5), a skrypty wywalone są na zewnątrz. Tak jak powinno być. Zwie się bardzo poważnie: unobtrusive validation.

Wystarczy zawrzeć to co się chce w @using(Html.BeginForm()) { } i jazda.

Ale co gdy nie chcemy formy? Ja na przykład pobieram ajaxem wyrenderowany serwerze panel do dodawania nowego elementu, a następnie doklejam go do formy już istniejącej na stronie. Teoretycznie można w tym panelu i tak utworzyć formę a potem wygrzebywać z niej po stronie klienta zawartość, ale… czyż to nie lamerskie?

Okazało się, że wystarczy taki myk:

  1:  @{
  2:      var originalCtx = ViewContext.FormContext;
  3:      ViewContext.FormContext = new FormContext();
  4:  }
  5:  
  6:  @* content with validation *@
  7:  
  8:  @{
  9:      ViewContext.FormContext = originalCtx;
 10:  }

i już. Pięknie może ten kod nie wygląda, ale zdecydowanie robi co do niego należy. Można to ubrać w ładny helper implementujący IDisposable, ale póki co jeszcze tego nie robiłem ponieważ sytuacja taka zdarza się raczej sporadycznie.

Jak dla mnie jest to trick miesiąca.

Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

1 Comment