web-dev-qa-db-ja.com

RenderBodyとRenderSectionの違い

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>
}
23
Prabhu

単に便宜上。ボディのレンダリングは、ほとんどの場合そうすることになるので、そのための専用の関数があるとよいでしょう。本文の@sectionを宣言せずに、関数を簡単に呼び出すことができます。

13
basarat

@RenderBodyから始めてください。これは非常に重要です。 _layoutにはそれが必要です。これは、ビューがレンダリングされる場所です。省略した場合、アプリは終了します(実行時に、ビューがコンパイルされていないためと思います)。

[修正: Renderbodyがない場合、この特定のレイアウトを参照するビューは実行時に無効になります。 (レイアウト自体はオプションであることに注意してください。)]

セクションは、ビュー内で同様の名前で定義されたコードブロックです

ビューに対応するコードブロックを含めることができます。

@section Navbar{
    <!-- Content Here -->
}

couldを強調します。これは、ナビゲーションバーがデリケートであるためですrequired: false

セクションは、各ビューが_layoutと機能/マークアップの一部を共有できる方法です。

フォローアップ: MVC開発のささやかな時間に、セクションを適度に使用することを学びました。

  • セクションは、JS参照がHTMLセクションに配置されていることを確認するのに役立ちます(これは時代遅れの慣行ですが)。
  • セクションは上部と側面のナビゲーションに役立ちます
  • セクションneverは必須です。これを行うと、コードが壊れやすくなります。
15
Dave Alperovich

RenderBodyは、各ビューをレンダリングするものであるため、必須です。 RenderSectionには、セクションを不要としてマークできるオプションのパラメーターがあります。

1
Tieson T.

here は、RenderBody()およびRenderPage()に関する基本情報です。

0
user632299