23 maja 2008, 02:12 dario Komentarze (0)

MVC.NET i brakujące SubView

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.

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.

public interface IViewDataBase
{
    RenderViewDelegate RenderViewSub { get; set; }
}

Teraz stwórzmy ten właściwy obiekt danych.

public class PortalViewDataBase : IViewDataBase
{
    public RenderViewDelegate RenderViewSub { get; set; }
}

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:

<div id="contentArea">
    <% ViewData.RenderViewSub("IndexSub", ViewData); %>
</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ą. :)  

Tagi:

Asp.net-mvc

Komentarze zablokowane

O autorze

Dariusz Gil - projektant i programista aplikacji internetowych budowanych na platformie Microsoft w technologii ASP.NET (C#) oraz MS SQL Server. Obecnie właściciel (narazie :)) jednoosobowej firmy Softio.

Filtruj używając APML