MVC Layout VS MVC Master Page

usr*_*ΛΩΝ 19 master-pages razor asp.net-mvc-4

我开始学习MVC4了.我发现了基于Razor模板或母版页创建视图的两种可能性.

我想了解两者之间的实际差异.

现在,我可以看到,如果我使用母版页创建一个视图,我可以覆盖几个部分.例如,如果我的主人定义了一个"左列"占位符和一个"正文"占位符,我不仅可以定义特定视图的主体,还可以在"左列"部分中呈现内容,例如显示控件绑定到页面的上下文(从搜索框到股票报价查看器).此外,无法使用Razor模板定义母版页,这些模板比其他语法简洁得多(部分错误:有人设法破解了这方面).

使用Razor Layouts,我只能定义一个可以被特定View覆盖的页面的连续块,并且我应该使用多个布局(断开DRY)来对页面的其他部分进行少量更改.我之前的陈述是正确的还是我错过了什么?

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

Dar*_*rov 26

您可以使用Razor部分.Scott Gu在这里写了他们的博客:http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

在您的布局中,您可以根据需要定义任意数量的部分:

<div id="leftMenu">
    @RenderSection("LeftMenu", required: false)
</div>
Run Code Online (Sandbox Code Playgroud)

您可以在视图中覆盖:

@section LeftMenu {
    <div>... here comes the left menu for this view ...</div>
}
Run Code Online (Sandbox Code Playgroud)

您还可以测试是否在视图中定义了某个部分,如果没有提供某些默认内容:

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu")
}
else { 
    <div>Some default left menu</div>
}
Run Code Online (Sandbox Code Playgroud)


Mau*_*rez 12

从MVC3开始,引入了剃刀视图引擎.在较高的层次上,视图引擎基本上是视图并呈现必要的HTML.Razor使用_layout.cshtml文件,它自己的模板系统类似于母版页.但是,MVC3和4有另一个名为WebForms View Engine的视图引擎,它确实使用了母版页.如果你分别查看MVC1和MVC2教程,你会看到母版页.在MVC3之前,只有WebForms View Engine.

现在在功能方面,两者都是相似的.母版页允许您定义内容占位符,而Razor允许您定义部分.两者之间的一个主要区别在于页面的呈现方式.母版页将页面呈现在外面,这意味着首先是母版页,然后是内容占位符.我相信Razor是递归的,从最里面的部分开始,然后就可以了.

有关剃刀布局的更多信息,请查看此博客文章:http: //weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor. ASPX

就哪一个更受欢迎,两个视图引擎都存在; 但如果你想利用剃刀语法 - 我强烈推荐 - 那么你必须使用布局系统.Razor不允许您使用母版页.

  • 谢谢你的详细解答. (2认同)