19

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

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

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

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

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

4

2 回答 2

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>

您可以在视图中覆盖它:

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

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

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu")
}
else { 
    <div>Some default left menu</div>
}
于 2012-11-10T13:07:36.370 回答
12

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

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

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

至于哪一个是首选,两种视图引擎都存在;但是如果你想使用剃刀语法——我强烈推荐——那么你必须使用布局系统。Razor 不允许您使用母版页。

于 2013-04-17T00:40:17.587 回答