Возможно ли сделать разделы Razor дополнительными?
Если у меня есть страница с:
<body>
@section SomeStuff {
<span>This is a section I just addered</span>
}
</body>
Возможно ли, чтобы макет не отображал этот раздел, или это противоречит тому, как это должно работать концептуально. Похоже, было бы полезно иметь возможность не отображать определенные разделы на странице (если я не думаю об этом неправильно).
Edit:
Включение сообщения об ошибке может быть полезно, когда я помещаю раздел на главную страницу, страница макета терпит неудачу: The following sections have been defined but have not been rendered for the layout page "/Views/Layouts/_Layout1.cshtml": "SomeStuff".
Как будто это заставляет меня отображать каждый раздел на странице или что-то в этом роде.
В других словах, в Layout.cshtml, я не вызываю @RenderSection, но в Index.html у меня есть раздел с именем SomeStuff
. Это законно? Похоже, что это заставляет меня отображать все разделы на странице, но похоже, что разделы должны быть необязательными, no?
Ответы
Ответ 1
вы можете указать, требуется ли раздел.
@RenderSection("SomeStuff", required: false)
если вы не визуализируете его в представлении, он не должен указывать здесь ошибку, отмеченную здесь
http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx
Ответ 2
Для определенного макета не для рендеринга определенного раздела вам нужно иметь что-то вроде этого: layout.cshtml
@RenderSection("Somestuff", required:false)
Ответ 3
Вы можете установить необязательный раздел, установив требуемый параметр в значение false. Если вы хотите включить некоторый необязательный HTML-код обложки вокруг своего раздела, вы также можете использовать метод IsSectionDefined.
@if(IsSectionDefined("SideBar"))
{
<div class="sidebar">
@RenderSection("SideBar", required: false)
</div>
}
Ответ 4
Вы можете сделать:
@if (condition) {
@RenderSection("SomeStuff")
}
Или просто используйте conditional statement
, а не @RenderSection
:
@if (yourCondition) {
<span>This is a section I just addered</span>
}