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

mir*_*agk 3 c# asp.net razor viewbag

我正在使用ASP.NET MVC Razor视图引擎,我正在尝试使用Viewbag.以下代码对我不起作用.在控制器中我有

ViewBag.courses = new List<dynamic>();
ViewBag.courses.Add(new { Name = "Math" });
Run Code Online (Sandbox Code Playgroud)

然后在我看来

@foreach(dynamic course in ViewBag.courses)
{
    <li>@course.Name</li>
}
Run Code Online (Sandbox Code Playgroud)

但它给我一个错误,说对象课程没有Name的定义.调试器为我提供了值,并正确显示了所有内容.有没有办法让这个工作?(我已经有一个解决方法,我只是想用它).

提前致谢.

Bra*_*tie 7

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

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

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

  return View(model: model);
}
Run Code Online (Sandbox Code Playgroud)

你的观点:

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

使用模型,这就是MVC的重点.它使生活变得如此简单,更不用说可以应用于模型的属性,以进一步定制它的显示方式(模板等).[Ab]使用dynamic你的方式就是把你的网站借给未来的问题,而不是提到一堆猫捉老鼠来回("我把这个属性命名为什么?","什么价值类型是再次'foo'?",...),忽略是否有其他人需要处理您正在生成的代码.