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.
Oo, może się przydać :)