Razor MVC布局与MVC母版页

Razor MVC布局与MVC母版页,razor,asp.net-mvc-4,master-pages,Razor,Asp.net Mvc 4,Master Pages,我开始学习MVC4。我遇到了基于Razor模板或母版页创建视图的两种可能性 我想了解两者之间的实际差异 现在,我可以看到,如果我使用母版页创建视图,我可以覆盖几个部分。例如,如果我的母版定义了“左栏”占位符和“正文”占位符,我不仅可以为特定视图定义正文,还可以呈现“左栏”部分的内容,例如显示绑定到页面所在上下文的控件(从搜索框到股票报价查看器)。 此外,母版页不能通过使用Razor模板来定义,因为与其他语法相比,Razor模板的详细程度要低得多(部分错误:设法破解了这一方面) 使用Razor布局

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

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

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

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


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

您可以使用Razor的部分。Scott Gu在这里发表了关于他们的博客:

在布局中,您可以根据需要定义任意多个部分:

<div id="leftMenu">
    @RenderSection("LeftMenu", required: false)
</div>

@RenderSection(“LeftMenu”,必填项:false)
您可以在视图中覆盖这些内容:

@section LeftMenu {
    <div>... here comes the left menu for this view ...</div>
}
@节左菜单{
…这是此视图的左侧菜单。。。
}
您还可以测试是否在视图中定义了节,如果没有,则提供一些默认内容:

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu")
}
else { 
    <div>Some default left menu</div>
}
@if(IsSectionDefined(“LeftMenu”){
@渲染部分(“左菜单”)
}
否则{
一些默认的左菜单
}

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

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

有关razor布局的更多信息,请查看此博客帖子:


在哪一个是首选的方面,两个视图引擎都存在;但是如果你想使用razor语法——我极力推荐——那么你必须使用布局系统。Razor不允许您使用母版页。

在Razor布局中,您可以定义多个
部分。您应该阅读这篇关于如何在Razor中工作的文章。感谢您提供详细的答案。