【问题标题】:Display in loop elements from ViewBag在 ViewBag 的循环元素中显示
【发布时间】:2020-06-24 06:33:16
【问题描述】:

我尝试使用循环 ViewBag 中的所有元素在 View 中显示

我的 ViewBag(在控制器类中)

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

我的观点

@foreach (var item in ViewBag.MenuItems)
   {
   <p>@item.controller</p>
   }

我出错了

RuntimeBinderException: 'object' does not contain a definition for 'controller'

【问题讨论】:

  • 你可能不应该使用ViewBag 来存储复杂的对象。我会创建一个ViewModel

标签: c# asp.net razor


【解决方案1】:

在循环时使用 ViewBag 作为 List,它将 viewbag 元素视为 MenuItem 类对象

@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();

【讨论】:

  • 我试试这个,但我得到了错误Object reference not set to an instance of an object。 ViewBag.MenuItems 不为空(计数 2 个元素)
  • 你为什么不添加一个类,它具有控制器和操作的属性,正如我在回答中编辑的那样
猜你喜欢
  • 1970-01-01
  • 2021-12-05
  • 2021-08-31
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2017-03-02
  • 2013-10-28
相关资源
最近更新 更多