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

RenderBody() и RenderSection() должны быть на каждом дочернем макете?

У меня есть три простых макета,

_Layout.cshtml (это базовый макет)

@RenderSection("something", required: false)
@RenderBody()

_Main.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section something {
   Hey I'm actually on the _Main layout.
}

Index.cshtml

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

Когда я пытаюсь отобразить индексный указатель в действии, я получил эту ошибку,

Метод "RenderBody" не был вызван для страницы макета "~/Views/Shared/_Main.cshtml".

Но подождите, _Main.cshtml имеет родительский макет, который уже имеет RenderBody(). Так что я ошибаюсь, я должен называть RenderBody() для каждого дочернего макета?

4b9b3361

Ответ 1

Да, RenderBody должен быть включен на каждую страницу макета, независимо от вложенности.

@RenderBody работает как заполнитель для механизма, чтобы знать, где удалить содержимое представления с помощью страницы макета.

Ответ 2

Этот код должен работать правильно:

_Layout.cshtml

@RenderSection("something", required: false)
@RenderBody()

_Main.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
 }
@section something {
   Hey I'm actually on the _Main layout.
}

Index.cshtml

@{
    Layout = "~/Views/Shared/_Main.cshtml";
 }
<div id="Index Content Here">
 @RenderBody()
 </div>

index.cshtml должен отображаться следующим образом:

<head>
Hey I'm actually on the _Main layout.   
</head>
 <div id="Index Content Here">
</div>
</div>

Ответ 3

Разделы могут быть сделаны необязательными, создавая их с помощью required: false

@RenderSection("SectionName", required: false)

Ответ 4

Попробуйте включить раздел в последнее представление.

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

@section something {
    content
}

ОБНОВЛЕНИЕ: Хорошо, я хочу сказать, что вам также нужно написать @RenderSection в _Main layout

@section something {
    Hey I'm actually on the _Main layout.
    @RenderSection("something", required:false)
}
enter code here