MVC布局与MVC母版页

19
我开始学习MVC4。我遇到了两种基于Razor模板或Master Page创建视图的可能性。
我想了解两者之间的实际区别。
目前,我可以看到如果我使用Master Page创建一个View,我可以覆盖多个部分。例如,如果我的Master定义了“左列”占位符和“正文”占位符,我不仅可以为特定的View定义正文,还可以在“左列”部分呈现内容,例如显示绑定到页面上下文的控件(从搜索框到股票报价查看器)。 此外,Master Pages无法通过使用Razor模板来定义,后者比其他语法更少冗长(部分错误:someone成功地突破了这一方面)。
使用Razor Layouts,我只能定义页面的一个连续块,可以被特定的View覆盖,并且我应该使用多个布局(打破DRY)来进行页面其他部分的小改变。我的前面的说法正确吗?还是我漏掉了什么?

显然,我可以通过巧妙使用jQuery在页面的任何部分呈现内容,但这是另一回事。


1
在 Razor 布局中,您可以定义多个“部分”。 您应该阅读关于 Razor 中 布局和部分 如何工作的文章。 - nemesv
2个回答

27

你可以使用Razor中的Sections。Scott Gu在这里写了关于它们的博客:http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

在你的布局中,你可以定义任意数量的sections:

<div id="leftMenu">
    @RenderSection("LeftMenu", required: false)
</div>
你可以在你的视图中覆盖它:
@section LeftMenu {
    <div>... here comes the left menu for this view ...</div>
}

你也可以测试视图中是否定义了一个区块,如果没有,则提供一些默认内容:

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu")
}
else { 
    <div>Some default left menu</div>
}

12

从MVC3开始,Razor视图引擎被引入。在高层次上,视图引擎基本上是负责获取视图并呈现所需的HTML的东西。Razor使用_layout.cshtml文件和自己的模板系统,类似于母版页。但是,MVC3和4还有另一个称为WebForms View Engine的视图引擎,它使用母版页。如果您分别查看MVC1和MVC2教程,就会看到母版页。在MVC3之前,只有WebForms View Engine。

现在就功能而言,两者相似。母版页允许您定义内容占位符,而Razor允许您定义部分。两者之间的一个主要区别在于页面的呈现方式。母版页从外向内呈现页面,即首先是母版页,然后是内容占位符。Razor是递归的,并从最内层部分开始,然后向外工作。

请参阅此博客文章以了解有关Razor布局的更多信息:http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

就首选哪个而言,两种视图引擎都存在;但是如果您想使用Razor语法 - 我强烈建议这样做 - 那么您必须使用布局系统。Razor不允许您使用母版页。


2
感谢您提供详细的答案。 - RayLoveless

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接