Razor页面上的@RenderSection

时间:2017-12-10 05:29:07

标签: c# asp.net razor

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

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

我的问题是:为什么?

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

" @page必须是页面上的第一个Razor指令。 @page会影响其他Razor结构的行为。"

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

感谢。

1 个答案:

答案 0 :(得分: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 -->
}