Как использовать @RenderBody ()? - PullRequest
       1

Как использовать @RenderBody ()?

0 голосов
/ 06 февраля 2019

Я новичок в ASP.NET MVC.Я получил шаблон в интернете и успешно внедрил его в мой корневой проект mvc.Однако, когда я помещаю @Renderbody () ... в зону, где я его размещаю, он выполняет «рендеринг» официального шаблона Microsoft и оригинального шаблона, созданного нами при создании проекта MVC.Может кто-нибудь сказать мне, почему это происходит?

Layout RenderBody()

what happens

1 Ответ

0 голосов
/ 06 февраля 2019

В Razor есть два вида представлений: обычные файлы .cshtml и макеты , которые (не такие, как на страницах ASPX, там главные страницы имеют суффикс .master), также имеют суффикс.cshtml, но обычно они не отображаются непосредственно из контроллера, однако вы должны указать макет страницы:

@{
  Layout = "_Layout";
}

Тогда Razor будет искать _Layout.cshtml в текущем каталоге и каталоге /Views/Shared, как и любой вид.Если вы установите Layout = null;, то у страницы не будет макета.

Этот код также может иметь значение /Views/_ViewStart.cshtml, поскольку по соглашению любой код в этом файле будет запускаться до код в представлении (чтобы вы могли переопределить макет, указанный в этом файле, из представления).

Когда Razor Engine должен отображать представление с макетом, он отображает только макет.Но если вы вызываете метод RenderBody(), он визуализирует представление и помещает его в место вызова RenderBody().

Существует аналогичный метод RenderSection(), который отображает один разделзрения.Посмотрите на элемент <head> вашего _Layout.cshtml:

<html>
  <head>
    <!-- ... -->
    @RenderSection("scripts", required: false)
    <!-- ... -->
  </head>
  <!-- ... -->
</html>

При вызове RenderSection() отображается раздел scripts.параметр required: false указывает, что casn будет представлением без раздела scripts;Без этого такое представление вызовет ошибку времени выполнения.

Теперь, пожалуйста, посмотрите следующее представление:

<div>Some View</div>

Вызов RenderBody() будет заменен на <div>Some View</div>.

Однако, если представление выглядит следующим образом:

<div>Some View</div>

@section scripts {
  <script src="jsfile.js"></script>
}

Тогда RenderBody() будет таким же, но вызов RenderSection("scripts", ...) будет заменен на <script src="jsfile.js"></script>.Разделы позволяют вам создавать основной контент, а также вторичный контент - такой как заголовок, специальные сценарии / стили и т. Д.

Некоторые комментарии: макеты также могут иметь макеты - это позволяет вам создавать вложенную страницу,например в компании - основной макет, специальный макет для маркетингового класса, макет для разделов управления ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...