MVC/Razor構文では、@RenderBody
が必要な理由を理解しようとしています。
例( example から取得したコード)
<html>
<head>
<meta charset="utf-8" />
<title>My WebSite</title>
<style>
#container { width: 700px; }
#left { float: left; width: 150px; }
#content { padding: 0 210px 0 160px; }
#right { float: right; width: 200px; }
.clear { clear: both; }
</style>
</head>
<body>
<div id="container">
<div id="left">
@RenderSection("left", required:false)
</div>
<div id="content">
@RenderBody()
</div>
<div id="right">
@RenderSection("right", required:false)
</div>
<div class="clear"></div>
</div>
</body>
</html>
@{
Layout = "~/_3ColLayout.cshtml";
}
<h1>Main Content</h1>
@section left {
<h1>Left Content</h1>
}
@section right {
<h1>Right Content</h1>
}
次のように、すべてに対して@RenderSection
を使用できないのはなぜですか。
<div id="content">
@RenderSection("Body", required:true)
</div>
@section Body{
<h1>Body Content</h1>
}
単に便宜上。ボディのレンダリングは、ほとんどの場合そうすることになるので、そのための専用の関数があるとよいでしょう。本文の@sectionを宣言せずに、関数を簡単に呼び出すことができます。
@RenderBody
から始めてください。これは非常に重要です。 _layoutにはそれが必要です。これは、ビューがレンダリングされる場所です。省略した場合、アプリは終了します(実行時に、ビューがコンパイルされていないためと思います)。
[修正: Renderbodyがない場合、この特定のレイアウトを参照するビューは実行時に無効になります。 (レイアウト自体はオプションであることに注意してください。)]
セクションは、ビュー内で同様の名前で定義されたコードブロックです
ビューに対応するコードブロックを含めることができます。
@section Navbar{
<!-- Content Here -->
}
couldを強調します。これは、ナビゲーションバーがデリケートであるためですrequired: false
セクションは、各ビューが_layoutと機能/マークアップの一部を共有できる方法です。
フォローアップ: MVC開発のささやかな時間に、セクションを適度に使用することを学びました。
RenderBody
は、各ビューをレンダリングするものであるため、必須です。 RenderSection
には、セクションを不要としてマークできるオプションのパラメーターがあります。
here は、RenderBody()およびRenderPage()に関する基本情報です。