23

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>
}
4

4 に答える 4

15

から始めましょう@RenderBody。これは非常に重要です。あなたの _layout にはそれが必要です。これは、ビューがレンダリングされる場所です。省略した場合、アプリは停止します (ビューはコンパイルされていないため、実行時に考えられます)。

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

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

@RenderSection("Navbar"、必須: false)

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

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

Navbar が宣言されているため、できることを強調しますrequired: false

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

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

  • セクションは、JS 参照が HTML セクションに確実に配置されるようにするのに役立ちます (これは時代遅れの慣行ですが.
  • セクションはトップとサイドのナビゲーションに便利です
  • セクションが必要になることはありません。そうすることで、コードが壊れやすくなります!
于 2013-01-29T03:41:47.287 に答える
13

単純に便利だから。体をレンダリングすることは、最もよく行うことなので、そのための専用関数があるとよいでしょう。本体の @section を宣言しないようにし、関数の呼び出しを容易にします。

于 2013-01-29T03:35:46.533 に答える
1

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

于 2013-01-29T03:34:16.607 に答える