2012-11-10 117 views
18

我开始学习MVC4。我遇到了基于Razor模板或主页创建视图的两种可能性。MVC布局VS MVC主页

我想了解两个之间的实际差异。

现在,我可以看到,如果使用主页创建视图,我可以覆盖多个部分。例如,如果我的主人定义了“左栏”占位符和“身体”占位符,我不仅可以为特定的视图定义主体,还可以在“左栏”部分中呈现内容,例如显示控件绑定到页面所在的上下文(从搜索框到股票报价查看器)。 此外,母版页无法通过使用Razor模板进行定义,该模板比其他语法冗长得多(部分错误:someone设法破解此方面)。

对于剃刀布局,我只能定义一个可以被特定视图覆盖的页面连续块,并且我应该使用多个布局(打破DRY)对页面其他部分进行一些更改。 我以前的陈述是否正确或者我错过了什么?

很明显,我可以通过充分利用jQuery的的渲染页面的任何一部分内容,却是另一回事

+1

在剃刀布局中,您可以定义多个“节”。你应该阅读这篇关于[layouts and sections]的文章(http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor .aspx)在Razor工作。 – nemesv

回答

26

你可以用切片用剃刀。斯科特谷的博客上讲述他们在这里: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> 

,你可以在你的意见重写:

@section LeftMenu { 
    <div>... here comes the left menu for this view ...</div> 
} 

你也可以测试某个部分是否已在视图中定义,如果未提供某些默认内容:

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

从MVC3开始,引入了剃须刀视图引擎。在高层次上,视图引擎基本上是视图并呈现必要的HTML。 Razor使用_layout文件,它自己的模板系统与主页面相似。但是,MVC3和4具有另一个视图引擎,称为WebForms视图引擎,并且使用母版页。如果您查看旧的MVC1和MVC2教程,您将看到母版页,因为在MVC3之前,只有WebForms视图引擎。

现在在功能方面,两者都很相似。主页允许您定义内容占位符,而剃须刀则允许您定义段落。一个主要的区别在于页面的渲染方式。主页面将页面呈现在外面,这意味着首先是主页面,然后是内容占位符。 Razor是我相信递归的,从最里面的部分开始,然后回到原来的状态。

看看这个博客帖子上剃刀布局 http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

而言,其中一个是首选,同时查看引擎确实存在更多的信息,但如果你想ulitize剃刀语法时才(我强烈推荐)那么你必须使用布局系统。 Razor不允许您使用母版页。

+2

谢谢你的详细解答。 – RayLoveless