Asp.net mvc 如何使用@RenderBody()?

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

我是ASP.NETMVC新手。我在互联网上获得了一个模板,并在我的mvc根项目中成功地实现了它。然而,当我放置@Renderbody()时。。。在我放置它的区域中,它对microsoft官方模板和我们创建MVC项目时的原始模板进行“渲染”。 有人能告诉我为什么会这样吗


在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
)。