<title>My WebSite</title> #container { width: 700px;"> <title>My WebSite</title> #container { width: 700px;"> <title>My WebSite</title> #container { width: 700px;" />

RenderBodyとRenderSectionの違い

@RenderBody が必要な理由を MVC/Razor の構文で理解しようとしています。

たとえば(から取得したコード)

<html>
    <head>
        <meta charset="utf-8" />
        <title>My WebSite</title>
        
    </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";
}

Main Content

@section left {

Left Content

} @section right {

Right Content

}

なぜ私は単純に @RenderSection をすべてのために使うことができないのですか?

<div id="content">
     @RenderSection("Body", required:true)
</div>

@section Body{
    

Body Content

}
22
nl ru de

3 答え

@RenderBody から始めましょう。これは非常に重要です。あなたの_レイアウトにはそれが必要です。これは、あなたのビューがレンダリングされる場所です。あなたがそれを残しておけば、あなたのアプリは死ぬでしょう(私は、ビューがコンパイルされていないので、実行時に考える)。

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

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

@RenderSection("Navbar", required: false)

あなたのビューに対応するコードブロックを持つことができます。

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

I emphasize could because the Navbar is delcared required: false

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

Followup: In my modest time of MVC development I have learned to make modest use of sections.

  • セクションはJSリファレンスがHTMLセクションに配置されていることを確認するのに便利です(古風な方法ですが)。
  • セクションはトップとサイドのナビゲーションに役立ちます
  • セクションは必須ではありません 。そうすることでコードが壊れやすくなります!
15
追加された
入力いただきありがとうございます。なぜRenderSectionがフレームワークに含まれていたのだろうと思っていました。しかし、@Basarat Aliが述べたように、便宜のために追加されたようです。
追加された 著者 Prabhu,
これは良い質問でした。十分な注意を払っていません。
追加された 著者 Dave Alperovich,
@bingles、RenderBody()なしでレイアウトページを作成しましたか?
追加された 著者 Dave Alperovich,
これは必ずしもそうではない可能性がありますが、@RenderBody()は実際には必要ありません。他の回答で言及されているように、それは利便性とデフォルトの規約の両方に役立ちます。
追加された 著者 bingles,
はい。今日試してみました。
追加された 著者 bingles,

単に利便性のためです。ボディをレンダリングすることは、あなたがそうする可能性が最も高いことです。本体の@sectionを宣言しないようにし、関数の呼び出しを容易にします。

13
追加された
RenderBodyの役割が便宜のためだけであることを明確にしてくれてありがとう。
追加された 著者 Prabhu,

RenderBody is required, as it's what renders each view. RenderSection has an optional parameter that lets you mark the section as not required.

1
追加された
なぜなら、RenderSectionをボディにも使用できないのはなぜですか?なぜ、別のディレクティブが必要なのでしょうか?本文は、ページのすべてのセクションの後です。
追加された 著者 Prabhu,
contentplaceholderまたは3のすべてのコンテンツを持つために必要なマスターページを使用したWebFormsページと同じように、すべてが1つのセクションまたは別のセクションに存在しなければならないので、各ビューにオーバーヘッドを追加するだけです。私は個人的に暗黙のボディセクションを好む。
追加された 著者 Tieson T.,