Odsłoń
Czasem dostępność java skryptu powoduje, że w zapomnienie mogą odejść pewne funkcjonalności MVC. W moim przypadku było tak gdy chciałem wyświetlać zawartość kanału z wiadomościami. Klik na kanale, a w tle myk-myk leci ajax i wracają wiadomości. Zrobiłem pewne zmiany w kodzie, tak że teraz kliknięcie na kanale powoduje przeładowanie strony i dopiero teraz użytkownikowi pokazują się wiadomości. Co za tym idzie lista kanałów renderowana jest w dwóch miejscach: na głównej liście, gdy żaden z kanałów nie jest wybrany oraz gdy jeden jest wybrany i czytany.
Jak wyświetlić listę kanałów tu i tu? Początkowa opcja ^c+^v odpada, bo nie. Potem myślę o jakimś ajaxie, jak by to zrobić… Ale ale, wtedy na scenę cały na biało wkracza Html.Action(…) Ta metoda umożliwia wywołanie z poziomu razora akcji na kontrolerze.
Co jest w tym dla mnie
Otóż w jednym i w drugim miejscu (gdzieś w razorze) mam taki kawałek kodu:
Wykonuje się podana przeze mnie akcja z zadanego kontrolera, oczywiście dodatkowe argumenty mogę także przekazać. Renderuje się we wskazanym przeze mnie miejscu i zwraca PartialView(…). Wszystko to w jednym żądaniu HTTP.
Metoda kontrolera posiada swoją logikę, swoje serwisy, wszystko swoje. Ja tylko grzecznie proszę ją o ukazanie swojej mocy. Aby ludzi i innych programistów w moim projekcie (?) nie kusiło przed wyświetleniem tylko tego panelu należy oznaczyć ją odpowiednim atrybutem:
ChildActionOnly – oznacza, że metoda może być wywołana tylko z innej, już wykonującej się akcji. Jeśli zostanie wywołana jako główna akcja, delikwent zostanie poinformowany o tym w wyjątkowy sposób.
Ile będzie mnie to kosztować
Wydawać się może, że to świetna sprawa, możemy stworzyć sobie kilka takich metod, potem fajny layout i powrzucać odpowiednie wywołania w odpowiednie miejsca. Nołp!. Takie wywołanie kosztuje: przejście przez cały cykl aplikacji życia MVC, oraz to czego u mnie nie widać na przykładzie(szczegóły w repo), a mianowicie ponowne przeliczenie stanu kanałów rss. Także trzeba się pilnować, bo może się okazać, że w pewnym momencie ten małe drobne “widgety” zaczną generować bardzo duże obciążenie dla procesowa, keszu, bazy danych czy innych zasobów. Ubiegając komentarze: zawsze może keszować – ale jeszcze tam nie jestem.
Dokładnie wykorzystanie akcji dostępne jest w repo pod adresem:
https://github.com/jstadnicki/isthereanynews
One thought on “ChildAction w akcji”