Asp.net mvc 如何使用@RenderBody()?
我是ASP.NETMVC新手。我在互联网上获得了一个模板,并在我的mvc根项目中成功地实现了它。然而,当我放置@Renderbody()时。。。在我放置它的区域中,它对microsoft官方模板和我们创建MVC项目时的原始模板进行“渲染”。 有人能告诉我为什么会这样吗Asp.net mvc 如何使用@RenderBody()?,asp.net-mvc,model-view-controller,Asp.net Mvc,Model View Controller,我是ASP.NETMVC新手。我在互联网上获得了一个模板,并在我的mvc根项目中成功地实现了它。然而,当我放置@Renderbody()时。。。在我放置它的区域中,它对microsoft官方模板和我们创建MVC项目时的原始模板进行“渲染”。 有人能告诉我为什么会这样吗 在Razor中,有两种视图:常规.cshtml文件和布局(与ASPX页面不同,母版页有后缀.master),也有后缀.cshtml,但通常它们不是直接从控制器呈现的,但是您必须指定页面的布局: @{ Layout = "_L
在Razor中,有两种视图:常规.cshtml文件和布局(与ASPX页面不同,母版页有后缀.master),也有后缀.cshtml,但通常它们不是直接从控制器呈现的,但是您必须指定页面的布局:
@{
Layout = "_Layout";
}
然后Razor将在当前目录和目录/Views/Shared
中查找\u Layout.cshtml
,就像任何视图一样。如果设置Layout=null代码>,则该页将没有布局
此代码也可以位于/Views/_ViewStart.cshtml
,因为按照惯例,此文件中的任何代码都将在视图中的代码之前运行(因此您可以从视图中覆盖此文件中指定的布局)
当Razor引擎应该使用布局渲染视图时,它只渲染布局。但是,如果调用方法RenderBody()
,它将呈现视图并将其放置在RenderBody()
的调用位置
有一个类似的方法,RenderSection()
,它渲染视图的单个部分。查看\u Layout.cshtml
中的
元素:
<html>
<head>
<!-- ... -->
@RenderSection("scripts", required: false)
<!-- ... -->
</head>
<!-- ... -->
</html>
对RenderBody()
的调用将替换为Some View
但是,如果视图如下所示:
<div>Some View</div>
@section scripts {
<script src="jsfile.js"></script>
}
一些视图
@节脚本{
}
然后,RenderBody()
将是相同的,但是调用RenderSection(“脚本”,…)
将替换为
。节允许您创建主要内容,但也可以创建次要内容,例如标题、特殊脚本/样式等
一些评论:版面也可以有版面-它使您能够创建嵌套页面,例如在公司中-主版面、营销类的特殊版面、管理部分的版面…在Razor中,有两种视图:常规.cshtml文件和和版面(与ASPX页面不同,母版页有后缀.master),也有后缀.cshtml,但通常它们不是直接从控制器呈现的,但是您必须指定页面的布局:
@{
Layout = "_Layout";
}
然后Razor将在当前目录和目录/Views/Shared
中查找\u Layout.cshtml
,就像任何视图一样。如果设置Layout=null;
,则页面将没有布局
此代码也可以位于/Views/_ViewStart.cshtml
,因为按照惯例,此文件中的任何代码都将在视图中的代码之前运行(因此您可以从视图中覆盖此文件中指定的布局)
当Razor引擎使用布局渲染视图时,它只渲染布局。但是,如果调用方法RenderBody()
,它将渲染视图并将其放置在RenderBody()
的调用位置
有一个类似的方法,RenderSection()
,它渲染视图的单个部分。请查看\u Layout.cshtml
的
元素:
<html>
<head>
<!-- ... -->
@RenderSection("scripts", required: false)
<!-- ... -->
</head>
<!-- ... -->
</html>
对RenderBody()
的调用将替换为Some View
但是,如果视图如下所示:
<div>Some View</div>
@section scripts {
<script src="jsfile.js"></script>
}
一些视图
@节脚本{
}
然后,RenderBody()
将是相同的,但是调用RenderSection(“脚本”,…)
将被
替换。节允许您创建主要内容,但也可以创建次要内容,例如标题、特殊脚本/样式等
一些评论:版面也可以有版面-它使您能够创建嵌套页面,例如在公司中-主版面、营销类的特殊版面、管理部分的版面…可能重复,但我没有意识到…我不使用renderbody()该程序不运行…如果我使用它,它在我看来。我的代码分为可能重复的部分,我没有意识到…我没有使用renderbody()程序没有运行…如果我使用它,它在我看来就是。我的代码被分成了几个部分。非常感谢您的解释!我发现消失的唯一解决方案是:@RenderBody()
@Dinho这不是最好的解决方案。您应该只为更改统一的内容而更改布局,如菜单、页脚等。如果您对视图有问题,只需找到视图并进行更改(默认视图通常为/Views/Home/Index.cshtml
)。非常感谢您的解释!我发现消失的唯一解决方案是:@RenderBody()
@Dinho这不是最好的解决方案。您应该更改布局,仅用于更改统一的内容,如菜单、页脚等。如果您对视图有问题,请找到视图并进行更改(默认视图通常是/Views/Home/Index.cshtml
)。