@RenderSection во вложенных шаблонах бритвы - PullRequest
34 голосов
/ 20 декабря 2011

Моя проблема в том, что я не могу использовать @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()

my view

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

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

results ...

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

1 Ответ

53 голосов
/ 20 декабря 2011

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

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 -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...