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 数据?
据我所知,
- 在底层 ViewBag 的类型是
ViewDataDictionary
- Controller中的ViewBag来自
ControllerBase
class 的ViewBag属性
- View中的ViewBag来自
WebViewPage
class 的ViewBag属性
据我了解,
- 如果视图要访问控制器存储的字典中的数据,则控制器和视图必须具有该字典对象的相同实例。
所以我不明白,
- View到底是如何访问Controller存储的ViewBag数据的?
查看 Controller class.
的源代码
在那里你会看到:
protected internal virtual ViewResult View(string viewName, string masterName, object model)
这就是你调用return View()
时调用的内容。该方法创建一个 ActionResult 并从控制器传递 ViewData。所以,是的,它们共享同一个字典对象实例。
我是 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 数据?
据我所知,
- 在底层 ViewBag 的类型是
ViewDataDictionary
- Controller中的ViewBag来自
ControllerBase
class 的ViewBag属性
- View中的ViewBag来自
WebViewPage
class 的ViewBag属性
据我了解,
- 如果视图要访问控制器存储的字典中的数据,则控制器和视图必须具有该字典对象的相同实例。
所以我不明白,
- View到底是如何访问Controller存储的ViewBag数据的?
查看 Controller class.
的源代码在那里你会看到:
protected internal virtual ViewResult View(string viewName, string masterName, object model)
这就是你调用return View()
时调用的内容。该方法创建一个 ActionResult 并从控制器传递 ViewData。所以,是的,它们共享同一个字典对象实例。