2010-02-26 4 views
6

Ho un'applicazione ASP.NET MVC con alcuni elenchi a discesa e elenchi a selezione multipla. In sostanza, un sacco di liste di opzioni.ASP.NET Modello MVC vs ViewData per elenchi di selezione

La mia domanda è; è meglio passare queste liste alla vista come parte del Modello o come ViewData?

Attualmente li sto passando come ViewData perché non ho davvero bisogno di loro sul modello e sembrano potenzialmente ingombranti per il passaggio sul modello (ottengo l'oggetto o gli elementi selezionati, che è davvero tutto ciò di cui ho bisogno). Al rovescio della medaglia, ViewData richiede il cast della vista, che non è bello come il modello fortemente tipizzato.

Esiste una best practice qui? Anche i suggerimenti di pro e contro per entrambi saranno apprezzati.

risposta

6

Vi consiglio di utilizzare ViewModels per passare quei dati. È soggetto ad errori di usare ViewData con "stringhe magiche" e preferisco usare intellisense invece di cercare di ricordare quelle "stringhe magiche". E non è necessario creare le liste di selezione nel controller. Basta usare alcuni oggetti IEnumerable e utilizzare il metodo di estensione ToSelectList da MvcContrib nella vista.

+1

+1 Per una questione di convenzioni, abbiamo fatto tutto il possibile per rimuovere le stringhe magiche. Non solo per quello che hai menzionato, perché l'intellisense è fantastico, ma il vero kicker è che le stringhe magiche si compongono sempre bene. Poi hanno l'opportunità di far saltare in aria a runtime. Ahi ... Le cose fortemente tipizzate esplodono in fase di compilazione, il che rende gli errori molto più facili da rilevare. –

-1

Tendo ad utilizzare ViewData se ho solo 1 elemento che sto passando alla vista. Pertanto, se invii più oggetti e devi compilare più elenchi a discesa, creerei un modello di visualizzazione. Creerei anche quel modello di visualizzazione nel progetto di app Web, quindi se il tuo modello di vista ha oggetti SelectList non avrai bisogno di un riferimento alla dll MVC nel tuo modello di dominio.

+0

E questa è una buona cosa? – Lankymart