C# 显示ViewBag中的循环元素

C# 显示ViewBag中的循环元素,c#,asp.net,razor,C#,Asp.net,Razor,我尝试使用ViewBag中的“循环所有元素”在视图中显示 我的视图包在控制器类中 我的看法 循环时使用ViewBag作为列表,它会将ViewBag元素视为MenuItem类对象 @foreach (var item in ViewBag.MenuItems as List<MenuItem>) { <p>@item.controller</p> } 在控制器类中使用 ViewBag.MenuItems = ( from componen

我尝试使用ViewBag中的“循环所有元素”在视图中显示

我的视图包在控制器类中

我的看法


循环时使用ViewBag作为列表,它会将ViewBag元素视为MenuItem类对象

@foreach (var item in ViewBag.MenuItems as List<MenuItem>)
{
    <p>@item.controller</p>
}
在控制器类中使用

ViewBag.MenuItems =
  (
     from components in _context.Components
     where components.ComponentName== "menuPosition"
     select new MenuItem
     {
         controller = components.valueI,
         action = components.valueI,
      }
  ).ToList();

无论如何,您可能不应该使用ViewBag来存储复杂对象。我会改为创建一个ViewModel。我尝试了这个方法,但得到的错误对象引用没有设置为对象的实例。ViewBag.MenuItems不是null计数2元素为什么不添加一个类,该类的属性将作为控制器和操作,正如我在回答中编辑的那样
RuntimeBinderException: 'object' does not contain a definition for 'controller'
@foreach (var item in ViewBag.MenuItems as List<MenuItem>)
{
    <p>@item.controller</p>
}
public class MenuItem
{
public string controller {get;set;}
public string action {get;set;}
}
ViewBag.MenuItems =
  (
     from components in _context.Components
     where components.ComponentName== "menuPosition"
     select new MenuItem
     {
         controller = components.valueI,
         action = components.valueI,
      }
  ).ToList();