3つのシンプルなレイアウトがありますが、
_ 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()
を呼び出す必要がありますか?
はい、ネストに関係なく、すべてのレイアウトページにRenderBodyを含める必要があります。
@RenderBody
は、エンジンのプレースホルダーとして機能し、レイアウトページを使用してビューのコンテンツをドロップする場所を認識します。
このコードは適切に動作するはずです:
_ 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>
<head>
Hey I'm actually on the _Main layout.
</head>
<div id="Index Content Here">
</div>
</div>
セクションは、required: false
でレンダリングすることでオプションにすることができます
@RenderSection("SectionName", required: false)
最後のビューにセクションを含めるようにしてください。
@{
Layout = "~/Views/Shared/_Main.cshtml";
}
@section something {
content
}
PDATE: OK
@section something {
Hey I'm actually on the _Main layout.
@RenderSection("something", required:false)
}
enter code here