在带有Web表单的MVC中,您可以设置如下所示的MasterType:
<%@ MasterType TypeName="FooMasterPage" %>
它为您提供了对母版页基类的引用,您可以在视图中使用它,如下所示:
<% Master.title = "foo" %>
使用Razor,我们可以为Layouts指定基类,但似乎我们无法从View中访问它们。这真的不可能吗?我看到的唯一工作是使用ViewBag / ViewData,它可以工作,但增加了额外的工作量和开销。
有没有办法从View?
引用Layout页面的基类实例答案 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中将数据从视图传递到布局的推荐机制。