【问题标题】:@RenderSection at Razor pagesRazor 页面上的 @RenderSection
【发布时间】:2017-12-10 05:29:06
【问题描述】:

我尝试在使用 Razor 脚本构建的网站中使用 @RenderSection。与 .cshtml 文件一起使用时出现错误。它也没有出现在 VS 的 IntelliSense 中。

现在,我刚刚意识到,如果我从 .cshtml 文件中删除 @page,那么错误就会消失,而且 IntelliSense 也会为我提供 @RenderSection

我的问题是:为什么?

它在 Microsoft 文档/教程中说,使用新的 ASP.NET Core Razor 脚本:

“@page 必须是页面上的第一个 Razor 指令。@page 影响其他 Razor 构造的行为。”

所以我有点困惑。使用 ASP.NET Core 中的新 Razor 页面在 .cshtml 文件中包含 html(部分视图 - 如主菜单等)的正确方法是什么?

谢谢。

【问题讨论】:

  • 没有@page 会出现什么错误?是编译时错误还是运行时错误?
  • 错误与“@page”有关。没有页面就没有错误。我使用“@page”得到的错误是“当前上下文中不存在名称‘RenderSection’”。但是因为在微软的教程中它说使用'@page',所以我想知道在使用'@page'时包含html块的正确方法是什么。
  • 你在布局页面上使用@RenderSection吗?
  • 没有。在 _Layout.cshtml 上没有问题。问题出在其他 .cshtml 页面上。问题是,内部页面的结构与主页略有不同,所以我有不同的标题。我试图做的是对菜单(以及其他重复自己的代码块)有一个部分视图,然后调用它们。在“旧”的 Razor 页面中,您可以将它们放在共享文件夹中并与 RenderSection 一起使用。现在换了新的就不行了

标签: c# asp.net razor


【解决方案1】:

我已经解决了这个问题,发现当您在子页面中使用 @RenderSection 时,它应该在其父页面的任何部分中(即 _layout.cshtml)

您的_layout.cshtml 应该是这样的,

<!DOCTYPE html>
<html>
  <head>
    <title>@ViewBag.Title</title>
  </head>
<body>
  @RenderSection("MenuContent", false) 
  @RenderBody()
</body>
</html>

您的子页面应该喜欢,

@{
  Layout = "~/Views/Shared/_Layout.cshtml";
}
@section MenuContent {
  @RenderSection("MenuContent", false)
}

你的嵌套子页面应该喜欢,

@section MenuContent
{
    <!-- content -->
}

【讨论】:

  • 谢谢。有点复杂。或者,我将只创建两种布局——一种用于主页,一种用于内部页面。我尝试在拥有组件时执行 Angular 提供的功能,然后将菜单作为一个组件,并且可以从任何其他组件调用它。如果有使用 Razor 的简单方法,我正在徘徊
猜你喜欢
  • 2021-06-26
  • 2019-12-21
  • 1970-01-01
  • 2019-05-01
  • 2019-06-20
  • 2020-07-09
  • 2021-04-22
  • 2018-01-26
  • 1970-01-01
相关资源
最近更新 更多