MVC3中的Page和ViewBag动态对象有什么区别?

时间:2012-05-30 12:33:39

标签: c# .net asp.net-mvc asp.net-mvc-3

动态对象Page可以在System.Web.WebPages.WebPageBase中找到,WebViewPageViewBag继承的抽象类。

可以在System.Web.Mvc.WebViewPage中找到动态对象ViewBag

两者都可以从视图传播到它的布局页面。

我可以看到的另一个区别是Page可以在Controller中使用,而{{1}}仅在视图中可用。我还应该知道其他任何不同之处吗?

1 个答案:

答案 0 :(得分:6)

PageViewBag是动态的,它们是字典的包装。

PagePageData字典的动态包装器。 ViewBagViewData字典的动态包装。

谈论差异时,

ViewBag用于在控制器和视图之间共享数据,甚至可以用来在主视图和部分视图之间共享数据。因此,可以从控制器和视图访问ViewBag。

Page有点不同,它无法从控制器访问,它用于在主页和部分页面之间传递数据。

请参阅此处使用Page在主视图和部分视图之间传递数据的示例。

<强> Main.cshtml

@{
   Page.Name = "Mark;
}

@RenderPage("DisplayName.cshtml"); // partial view

<强> DisplayName.cshtml

<p>
Name: @Page.Name
</p>

不是我使用RenderPage渲染局部视图,部分视图也位于主视图所在的同一目录中。