Con un primo approccio, il passaggio di dati all' interno del Framework ASP.NET MVC potrebbe sembrare decisamente ostico, anche perchè non consente, a primo approccio, una tipizzazione dei dati ... Cosa che chiaramente ci porta troppo lontano da una logica di sviluppo basata sulle Entities ..
Una prima soluzione è quella di sfruttare a pieno le funzionalità dei generics passando alla pagina .aspx una view di pe sè tipizzata.
Un esempio lo trovate nel codice sottostante:
[ControllerAction]
public void Dettaglio(int id)
{
TICKET ticket = repository.OttieniTicket(id);
RenderView("Dettaglio", ticket);
}
In questo modo ho creato un Controller, o meglio una action di un controller che mi visualizza il dettaglio di un certo record, in base all' ID. Qui è LinQ che si occupa di passarmi l' entità ... tramite il mio repository.
In questo primo esempio, per accedere poi alle proprietà basterà usare le extension della classe ViewData in questo modo:
<span><%= ViewData.Codice %></span>
E fin qui, sappiamo che il nostro ViewData è una tipizzazione della classe Ticket e tutto va bene.
Ma se nella pagina abbiamo anche un controllo SELECT che deve essere popolato da un' altra Entity, diversa da Ticket?
Beh in questo caso tanto vale sfruttare NET 3.0 e dichiarare una bella classe che svolge proprio la funzione di ViewData, come in questo esempio:
public class TicketViewData
{
public TICKET Ticket { get; set; }
public List<UTENTIWINDOW> Utenti { get; set; }
}
Adesso la pagina non dovrà piu' ereditare dal solito ViewPage<Entity> ma da ViewPage<TicketViewData> e quindi dovremo anche modificare la parte del Controller che invia i dati in questo modo:
TicketViewData view = new TicketViewData();
view.Ticket = repository.OttieniTicket(id);
view.Utenti = repository.OttieniUtenti();
RenderView("Dettaglio", view);
Bene adesso nella Pagina .aspx richiamata dal controller possiamo leggere entrambe le entities, oltre al fatto di poter caricare, ad esempio la entity Utenti in una select cosi':
<div>
<%= Html.Select("UtenteAssegnato", ViewData.Utenti) %>
</div>
Che dire, davvero molto molto innovativo rispetto allo sviluppo WebForm. Peccato che JQuery non sia stato incluso nel progetto, ma lo sarà presto ...