2009-08-14 13 views
5

Ho una vista fortemente digitata su una classe Articolo. Nel mio controller ho bisogno di inviare due liste diverse. C'è un modo più semplice per farlo se non quello di creare una nuova classe con due List.Asp.Net MVC - Vista fortemente tipizzata con due elenchi dello stesso tipo

Quello che in definitiva sto cercando di fare è avere sulla mia homepage 10 articoli ordinati per data e 10 articoli ordinati per popolarità.

quello che ho fatto

Io sono andato con una combinazione delle due risposte. Ho fortemente digitato la mia vista sulla nuova classe che ho creato con le due liste. Ho quindi scritto con forza due viste parziali su ognuna delle liste. Può sembrare eccessivo, ma mi piace come si è scoperto.

risposta

10

"creare una nuova classe con due elenchi" è la strada da percorrere. Si chiama un modello di vista e una volta che lo si abbraccia, il potere delle visualizzazioni fortemente tipizzate si apre davvero. Può essere questo semplice:

public class IndexViewModel 
{ 
    public List<Item> Newest { get; set; } 
    public List<Item> Popular { get; set; } 
} 
3

E 'quello che John ha suggerito o non avere una visione fortemente tipizzato e aggiungendoli al Viewdata:

ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

Un'altra opzione sarebbe fortemente tipizzato viste parziali.

1

È consigliabile creare un modello che includa entrambi gli elenchi in modo specifico per la vista.

Tipicamente nel piccolo MVC che ho fatto, ho creato un modello per ogni vista anche se hanno semplicemente passato identicamente i dati che venivano serviti da dati o livello aziendale solo per mantenere la separazione tra le due parti molto rigide . Questa impostazione è un po 'più di lavoro e non è necessaria in molti casi semplici, ma a mio parere mantiene le cose più pulite.

4

Ci sono due filosofie generali a questo. Il primo è prendere l'approccio che John Sheehan ha fatto. Si crea un modello di visualizzazione personalizzato con entrambi gli elenchi e lo si passa alla vista fortemente tipizzata.

Il secondo è considerare gli elenchi come dati "secondari" e inserirli in ViewData come indicato da jeef3. Ma quando si rendono gli elenchi, si utilizza un partial fortemente tipizzato.

ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

Con questo voglio dire nella visualizzazione principale, che si definirebbe RenderPartial (...), ma passano nella chiave visualizzazione dei dati è stato utilizzato.

E il tuo parziale sarà simile:

<%@ ViewUserControl Inherits="System.Web.Mvc.ViewUserControl<List<Item>>" %> 
... 

Questo dà digitato fortemente l'accesso a quella visualizzazione di dati dall'interno del parziale.

Problemi correlati