来自View的MVC3 Razor布局基类

时间:2011-01-27 18:36:01

标签: layout asp.net-mvc-3 razor

在带有Web表单的MVC中,您可以设置如下所示的MasterType:

<%@ MasterType TypeName="FooMasterPage" %>

它为您提供了对母版页基类的引用,您可以在视图中使用它,如下所示:

<% Master.title = "foo" %>

使用Razor,我们可以为Layouts指定基类,但似乎我们无法从View中访问它们。这真的不可能吗?我看到的唯一工作是使用ViewBag / ViewData,它可以工作,但增加了额外的工作量和开销。

有没有办法从View?

引用Layout页面的基类实例

2 个答案:

答案 0 :(得分:1)

我无法想到为什么开发ASP.NET MVC应用程序的人需要为母版页提供公共基本类型。这意味着你正在编写类似于代码隐藏的东西,并且有点像MVC。您可以在WebForms视图引擎中执行此操作的事实是因为这是来自传统WebForms的遗产,但这并不意味着它应该完成。有很多方法可以在ASP.NET MVC中包含常见功能,包括ViewModel,自定义HTML助手的使用,部分的使用,Html.Action的使用,剃刀部分的使用等等......

答案 1 :(得分:1)

无论你是否应该在MVC中做这样的事情(我同意Darin的观点),在Razor中根本不可能,这是因为Razor视图首先从视图开始一次性渲染。在视图执行完毕之后,甚至不知道将使用哪个布局页面。

相比之下,aspx视图引擎执行多次传递,其中页面/主控制树首先被实例化,然后连接,然后发生一些事件(这在WebForms中有用但在MVC中没有)然后渲染发生。控制树的这个概念允许您从视图页面引用主页面。剃刀没有那个。

ViewBag / ViewData是在Razor中将数据从视图传递到布局的推荐机制。