Можно ли делегировать рендеринг раздела с движком Razor родительскому макету при использовании вложенных макетов? - PullRequest
0 голосов
/ 22 июня 2019

У меня есть проект, который написан поверх платформы Asp.Net Core 2.2 и использует шаблонизатор Razor для генерации представлений.

У меня есть следующий макет "дедушка" _Layout.cshtml

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="author" content="CrestApps.com">
    <meta name="description" content="@ViewData["description"]">
    <meta name="keywords" content="@ViewData["keywords"]">
    <title></title>
    <partial name="_Styles" />
    @RenderSection("Styles", required: false)
</head>
<body>
    <partial name="_Header" />
    <partial name="_CookieConsentPartial" />

    <main role="main">
        @RenderBody()
    </main>

    <partial name="_Footer" />
    <partial name="_Scripts" />

    @RenderSection("Scripts", required: false)
</body>
</html>

Это мой второй макет _SecondLayout.cshtml выглядит так, что наследует мой _Layout.chtml, как вы можете видеть в коде ниже

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

@RenderSection("Styles", required: false)
@RenderSection("Introduction", required: false)

<div class="container-fluid body-content ">
    @RenderBody()
</div>

@RenderSection("Scripts", required: false)

Тогда мой взгляд будет выглядеть так

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

@*.... Some code ....*@
@section scripts {
   // Some JS Code
}

Приведенный выше код вставит @section scripts в макет _SecondLayout. Я хочу, чтобы он вставлялся в положение, где _Layout.cshtml указывает на то, что JS-код должен находиться в самом низу страницы, а также загружается скрипт после загрузки всех других ресурсов.

Как я могу дать _SecondLayout команду делегировать рендеринг раздела @RenderSection() на верхний уровень?

1 Ответ

0 голосов
/ 02 июля 2019

Если я правильно понимаю ваш вопрос, замените последнюю строку _SecondLayout.cshtml

    @RenderSection("Scripts", required: false)

с

    @section Scripts {
      @RenderSection("Scripts", required: false)
    }
...