WykopGwardel.icio.us

MVC.NET i brakujące SubView

23 maja 2008, 02:12

KomentarzeKomentarze: 0 KategorieKategorie: mvcnet asp.net

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 post jest widoczny także na: ZINE.NET

Dodaj komentarz Dodaj komentarz

Twój email (niepublikowany/opcjonalnie):

Twoja strona (opcjonalnie):

Imię i nazwisko/nick (wymagane):

Treść (wymagane):

Chcę być poinformowany o kolejnych komentarzach:

To pole zostaw puste

Uwaga! Zastrzegam sobie prawo do usuwania obraźliwych i wulgarnych komentarzy.