Asp.net mvc 3 ViewBag-MVC3-ASP.NET

Asp.net mvc 3 ViewBag-MVC3-ASP.NET,asp.net-mvc-3,Asp.net Mvc 3,我试图为控制器中的ViewBag分配一个值,以便以后在视图中使用,它会出现以下错误 像这样在控制器中赋值 ViewBag["isAdmin"]=true; 错误: Cannot apply indexing with [] to an expression of type 'System.Dynamic.DynamicObject' 以前有人有过这个吗?您只需要ViewBag.isAdmin=true。您可以访问的是 if(ViewBag.isAdmin) { //do stu

我试图为控制器中的ViewBag分配一个值,以便以后在视图中使用,它会出现以下错误

像这样在控制器中赋值

 ViewBag["isAdmin"]=true;
错误:

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

以前有人有过这个吗?

您只需要
ViewBag.isAdmin=true
。您可以访问的是

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

作为后续,ViewBag(和ViewData)背后的思想是,您可以存储内容的非键值对,并方便地在视图中访问它们

使用ViewData,您可以这样引用这些内容:

ViewData["SomeKey"] = someObject;
如果您想使用ViewBag来执行相同的操作(它提供了对ViewData字典构造的包装,使其更简洁,可读性更强),您可以参考以下内容:

ViewData["SomeKey"] = someObject;
ViewBag.isAdmin=true

并且可以检查它们,正如tyrongower上面所说的那样:

if (ViewBag.isAdmin)
{
   // do stuff
}
当我使用这个构造时,我通常使用ViewBag语法,但它们确实引用了相同的东西。如果你在视野之外做了这样的事情:

ViewData[“isAdmin”]=true

如果你愿意,你可以这样引用:

ViewBag.isAdmin

反之亦然


关于这个概念再详细一点。

ViewBag
动态的
类型,因此您可以使用点符号。但是
ViewData
属于
Dictionary
(well-ViewDataDictionary)类型,因此必须使用索引来指定键。