ViewBag是如何实现的

ExpandoObject

在 MVC 3 的时候 Controller 可以通过 ViewBag 将数据传送到 View。
如下就是通过 ViewBag 设置页面标题:

public ActionResult Index()
{
    ViewBag.Title = "Index";
    return View();
}
<head>
    <title>@ViewBag.Title</title>
</head>


ViewBag 就是一个 dynamic 的应用,而有些人可能会感觉很奇怪,就算是 dynamic 也不能存取一个不存在的 property,为什么 ViewBag 可以动态添加任何一个 property 。

因为 ViewBag 的实际类型是 ExpandoObject,这个类型可以动态产生 property,所以才会有 ViewBag 这样的特性。

using System.Dynamic;
dynamic model = new ExpandoObject();
model.Title = "Index";
model.Time = DateTime.Now;

你可能感兴趣的:(ViewBag是如何实现的)