Quando e dove usare ViewBag

7

Sono uno studente che lavora su un progetto mvc per spostare un sito da coldfusion a .net mvc. Stavamo anche ridisegnando il sito nel processo, quindi sto lavorando con altri membri del team, i membri del team di progettazione hanno una conoscenza di base del rasoio, ma non ci si aspetta che conosca altre parti del framework.

Ho sempre cercato di usare ViewBag il meno possibile, ora ancora di più perché i progettisti non sanno cosa c'è nella ViewBag quando costruiscono le viste e non ottengono intellisense.

Da quando lavoro su questo progetto mi sono trasferito a usare ViewBag solo in baseController per il progetto aggiungendo proprietà in OnActionExecuted In modo che ogni vista abbia le stesse proprietà ViewBag . Ho anche provato a utilizzare solo ViewBag proprietà nei layout.

Da quando ho fatto questo, mi sono chiesto quali siano le buone ragioni per aggiungere sempre al ViewBag in un'azione del controller direttamente prima di chiamare la vista. Sono giunto ad apprezzare il fatto che rendere più ViewModels mentre un po 'più di tempo aiuta a informare esattamente ciò che una vista dovrebbe fare, oltre ad aggiungere chiarezza.

Volevo sapere quando altre persone hanno utilizzato ViewBag dove lo hanno trovato appropriato e per cosa lo hanno usato. Non riesco a pensare di usarlo in qualsiasi momento al di fuori di un basecontroller ora, speravo di ottenere informazioni su altri usi per il ViewBag che forse mi mancano. Dovrei mai aggiungere direttamente a ViewBag prima di chiamare un'azione, o dovrei creare un viewModel più robusto in questi casi?

    
posta Tenderdude 08.12.2016 - 18:28
fonte

1 risposta

6

Un ViewBag è essenzialmente un dizionario, tranne per il fatto che la sintassi è un po 'più pulita. Invece di scrivere

myDict["SomeProperty"]

puoi accedere agli elementi del dizionario dinamico con notazione puntata di prima classe:

myViewBag.SomeProperty

Poiché ViewBag è una proprietà di ControllerBase , fornisce una posizione comoda per l'archiviazione delle coppie chiave / valore durante le operazioni del controllore, utilizzando una sintassi di prima classe. Lo useresti ogni volta che devi inviare coppie chiave / valore a una vista e vuoi la comodità e la sintassi pulita di un dizionario dynamic .

ViewBag deriva da DynamicViewData , che gli dà alcune proprietà utili. Ad esempio:

// Implementing this function extends the ViewBag contract, supporting or improving some scenarios. For example
// having this method improves the debugging experience as it provides the debugger with the list of all
// properties currently defined on the object.
public override IEnumerable<string> GetDynamicMemberNames()
{
    return ViewData.Keys;
}

In generale, preferirei strongmente% dattilografato ViewModel sui dizionari ViewBag o ViewData , poiché gli oggetti strongmente tipizzati ti danno sicurezza del tipo in fase di compilazione. Questo è particolarmente vero se hai dati strutturati complessi da passare alla vista.

Vedi anche
ExpandoObject

    
risposta data 08.12.2016 - 19:43
fonte

Leggi altre domande sui tag