c# - 如何在 ASP.NET MVC 中获取 ViewBag 值?

标签 c# asp.net razor viewbag

我正在使用 ASP.NET MVC Razor View 引擎,并且正在尝试使用 Viewbag。以下代码对我不起作用。在我的 Controller 中

ViewBag.courses = new List<dynamic>();
ViewBag.courses.Add(new { Name = "Math" });

然后在我的 View 中

@foreach(dynamic course in ViewBag.courses)
{
    <li>@course.Name</li>
}

但是它给我一个错误,说对象类(class)没有名称的定义。调试器给我值,并正确显示所有内容。有什么办法可以让它工作吗? (我已经有了解决方法,我只是更愿意使用它)。

提前致谢。

最佳答案

就我个人而言,我会使用以下方法解决它:

public class Course
{
    public String Name { get; set; }
}

public class CoursesViewModel
{
    private IList<Course> courses;

    public IList<Course> Courses{
      get { return this.courses ?? (this.courses = new List<Course>()); }
      set { this.courses = value; }
    }
}

Controller :

public ActionResult Index()
{
  CoursesViewModel model = new CoursesViewModel();
  model.Courses.Add(new Course { Name = "Math" });

  return View(model: model);
}

你的观点:

@model CoursesViewModel
@* ... *@
<ul>
@foreach (Course course in Model.Courses)
{
  <li>@course.Name</li>
}
</ul>
@* ... *@

使用模型,这就是 MVC 的全部意义所在。它让生活变得如此轻松,更不用说您可以将属性应用于模型以进一步自定义其显示方式(模板等)。 [Ab]按照你现在的方式使用 dynamic 只会让你的网站应对 future 的问题,更不用说一堆来回的猫捉老鼠游戏了(“我给那个属性命名了什么?”,“'foo' 又是什么值类型?”,...),忽略是否有其他人需要处理您正在生成的代码。

关于c# - 如何在 ASP.NET MVC 中获取 ViewBag 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273341/

相关文章:

c# - 我应该打更频繁、更小的电话吗?还是不太频繁的大电话?

javascript - 在 JavaScript 中操作数据时是否应该避免使用 C# 中的十进制类型

c# - 更改 deleteCommand 按钮文本

razor - .net Razor 渲染没有空格的串联文本

c# - 使用 Entity Framework 的代码优先在保存时抛出 DbUpdateException

c# - 复杂类型不显示存储过程的结果

c# - 如何从按钮中删除禁用属性?

asp.net - 返返回告数据后如何停止动画 GIF?

asp.net-mvc - 在 Razor View 中重命名 mvc 模型对象

asp.net-mvc-3 - 在没有 HttpContext 或 ControllerContext 的情况下将 ASP.NET MVC 字符串呈现给 View?