2011-06-24 25 views
8

Estoy intentando asignar un valor a ViewBag en el controlador para su uso posterior en la Vista. Se queja del siguiente error.ViewBag- MVC3-ASP.NET

Asignando el valor en el controlador de esta manera.

ViewBag["isAdmin"]=true; 

error:

Cannot apply indexing with [] to an expression of type 'System.Dynamic.DynamicObject' 

¿Alguien tenía antes?

+1

'ViewBag' es del tipo' Dynamic', por lo que puede usar la notación de puntos. Sin embargo, 'ViewData' es de tipo' Dictionary' (bien ViewDataDictionary), por lo que debe usar la indexación para especificar la clave. –

Respuesta

18

Todo lo que necesita es ViewBag.isAdmin = true. el se puede acceder es con

if(ViewBag.isAdmin) 
{ 
    //do stuff 
} 
9

Como seguimiento, la idea detrás de ViewBag (y ViewData) es que se puede almacenar fuera de pares de valores clave de cosas y convenientemente acceder a ellos a través de la vista.

Con ViewData, se hace referencia a estas cosas de esta manera:

ViewData["SomeKey"] = someObject; 

Si desea hacer lo mismo con el ViewBag lugar (que proporciona una envoltura alrededor de ese diccionario ViewData constructo y hace que sea un poco menos detallado y un poco más legible) se hace referencia a las cosas de este modo:

ViewBag.isAdmin = true;

y puede comprobarlos, como se ha indicado anteriormente tyrongower, así:

if (ViewBag.isAdmin) 
{ 
    // do stuff 
} 

Normalmente utilizo la sintaxis ViewBag cuando uso esta construcción, pero realmente hacen referencia a lo mismo. Así que si usted hizo algo así como fuera de la vista:

ViewData["isAdmin"] = true;

que podría hacer referencia a ella como esto, si usted fuera tan inclinado:

ViewBag.isAdmin

o viceversa.

Solo un poco más de detalle sobre el concepto.

Cuestiones relacionadas