Od jakiegoś czasu dłubię sobie w domku aplikacyjkę ćwicząc MVC.NET. Co to jest i jak to się je napiszę innym razem. Teraz chciałem zwrócić uwagę na jeden aspekt. MVC.NET jest obecnie w fazie rozwojowej. O wersji beta można narazie sobie pomarzyć, a z tym co narazie jest trzeba sobie radzić.
Charakter MVC.NET nie dopuszcza do działania kontrolek, które wymagają istnienia formy uruchamianej po stronie serwera, czyli <form runat="server">. Jak sobie radzić w takim razie z powtarzającym się kodem html?
Otóż było by super, gdyby były tak zwane SubViews, czyli widoki, które mogły by być renderowane wewnątrz innego widoku. Niby można się bawić w zagnieżdżone MasterPage's, ale nie jest z tym tak różowo.
Z pomocą przychodzi delegat do metody RenderView.
1: public delegate void RenderViewDelegate(string viewName, object viewData);
Metoda ta jest uruchamiana z kontrolera i jest odpowiedzialna za wyświetlenie 'viewsa', czyli widoku. Dzięki delegatowi przekazanemu do jednego z widoków jesteśmy w stanie w łatwy sposób renderować wskazane przez nas inne widoki jako części składowe (niczym kontrolki). :)
Na początek zdefiniujmy sobie interface, który będzie podstawą naszego obiektu do transferu danych z kontrolera do widoku.
1: public interface IViewDataBase
2: {
3: RenderViewDelegate RenderViewSub { get; set; }
4: }
Teraz stwórzmy ten właściwy obiekt danych.
1: public class PortalViewDataBase : IViewDataBase
2: {
3: public RenderViewDelegate RenderViewSub { get; set; }
4: }
Każdy kolejny obiekt danych powinien dziedziczyć po obiekcie bazowym, który posiada powyższą implementację z delegatem. Teraz możemy na każdym widoku wykonać następujący kod:
1: <div id="contentArea">
2: <% ViewData.RenderViewSub("IndexSub", ViewData); %>
3: </div>
W miejscu wywołania zostanie wyrenderowany HTML z widoku IndexSub, który dodatkowo dostaje ten sam obiekt danych co widok nadrzędny. Co za tym idzie można uruchamiać wiele widoków zagnieżdżonych. UWAGA! Trzeba uważać na zapętlenie. :)
Co do samego MVC.NET to postaram się jeszcze co nieco o tym napisać inną razą. :)
Ten artykuł jest widoczny także na:
ZINE.NETJeśli spodobał Ci się ten artykuł, to podziel się tą informacją z innymi.
Nikt jeszcze nie skomentował tego artykułu. Bądź pierwszy.