View 究竟是如何访问 Controller 存储的 ViewBag 数据的?

How exactly does a View access ViewBag data stored by a Controller?

我是 ASP.NET MVC 的新手。刚开始学习。我关注的所有教程、文章或书籍都说 "you can send data from Controller to a View using the ViewBag..."

来自控制器 -

public ActionResult Index()
{
    ViewBag.Message = "Index Message";
    return View();
}

到视图 -

<h3>@ViewBag.Message</h3>

但是,没有人愿意解释,而且我很难理解的是 View 如何(或可以)访问从 Controller 发送的 ViewBag 数据?

据我所知,

  1. 在底层 ViewBag 的类型是 ViewDataDictionary
  2. Controller中的ViewBag来自ControllerBaseclass
  3. 的ViewBag属性
  4. View中的ViewBag来自WebViewPageclass
  5. 的ViewBag属性

据我了解,

所以我不明白,

查看 Controller class.

的源代码

在那里你会看到:

protected internal virtual ViewResult View(string viewName, string masterName, object model)

这就是你调用return View()时调用的内容。该方法创建一个 ActionResult 并从控制器传递 ViewData。所以,是的,它们共享同一个字典对象实例。