Подтвердить что ты не робот

@RenderSection в вложенных шаблонах бритвы

Моя проблема: я не могу использовать @RenderSection из вложенного шаблона, когда @RenderSection определен в базовом шаблоне. В настоящее время у меня есть вложенный базовый шаблон, который связан с дочерним шаблоном, который затем используется на страницах просмотра. Когда я определяю @RenderSection в базовом шаблоне и отображаю его на страницах просмотра, он выдает ошибку.

Вот точная проблема.

Я хочу создать RenderSection, чтобы я мог вставлять собственные скрипты. Мой базовый шаблон....

<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
 @RenderSection("HeaderContent", false) // The region of the header scripts (custom css)

</head>
<body>
@RenderBody()
</body>
</html>

Затем я пропущу дочерний шаблон, поскольку я не хочу размещать какой-либо пользовательский код главы и применять его к самой странице..

@section HeaderContent {
    <script>alert("hi");</script>
}

Моя проблема в том, что я не могу добавить пользовательский код главы в базовый шаблон с моих обычных страниц.

Определены следующие разделы, но не были отображены для страницы макета ~/Views/Shared/OneColLayer.cshtml": "HeaderContent.

Нужно ли включать указатель на базовый шаблон на странице просмотра?

@{
    Layout = "~/Views/Shared/BaseTemplate.cshtml";
}

Мой новый базовый шаблон

<head>
  <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/layout.css")" />
  <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/global.css")" />
  <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"></script>
  <script type="text/javascript" src="@Url.Content("~/js/fadeInFadeOut.js")"></script>
  <title>@ViewBag.Title</title>
  @RenderSection("HeaderContent", false)
</head>
<body>
  @RenderBody()
</body>

мой новый дочерний шаблон

@{
  Layout = "~/Views/Shared/BaseTemplate.cshtml";
}
@RenderSection("HeaderContent", false)
@RenderBody()

мой взгляд

@{
  ViewBag.Title = "Home";
  Layout = "~/Views/Shared/OneColLayer.cshtml";
}
@section HeaderContent {
  <h1>Left Content</h1>
}
<div>my view content</div>

содержимое будет помещено в шаблон oneCol, теперь базовый шаблон.

Результаты...

<div id="Content">
   <h1>Left Content</h1>
</div>
4b9b3361

Ответ 1

Вам нужно указать разделы, разрешенные для прохождения в среднем шаблоне.

BaseTemplate.cshtml

<!DOCTYPE html>
<html>
  <head>
    <title>@ViewBag.Title</title>
    @RenderSection("HeaderContent", false) @* The region of the header scripts (custom css) *@
  </head>
<body>
  @RenderBody()
</body>
</html>

ИЗМЕНИТЬ

ваш новый дочерний шаблон

@{
  Layout = "~/Views/Shared/BaseTemplate.cshtml";
}
@section HeaderContent {
  @RenderSection("HeaderContent", false)
}
@RenderBody()

Если вы поместите раздел рендеринга внутри раздела из базового шаблона, он отобразит этот раздел в правильном месте на базовом шаблоне.


View.cshtml → использует MiddleLayout.cshtml в качестве макета

@section HeaderContent
{
    <!-- header content that will now render -->
}

<!-- page content -->