web-dev-qa-db-fra.com

Différence entre RenderBody et RenderSection

Dans la syntaxe MVC/Razor, j'essaie de comprendre pourquoi nous avons besoin de @RenderBody.

Par exemple (code tiré de exemple )

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

Pourquoi ne puis-je pas simplement utiliser @RenderSection pour tout, comme ceci:

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

@section Body{
    <h1>Body Content</h1>
}
23
Prabhu

Tout simplement pour des raisons de commodité. Rendre le corps est quelque chose que vous feriez très probablement, il est bon d'avoir une fonction dédiée pour cela. Vous empêche de déclarer une @section pour le corps et donne une fonction plus facile à appeler.

13
basarat

Commencer avec @RenderBody, c'est vital. Votre _layout doit l'avoir. C'est là que votre vue sera rendue. Si vous la laissez de côté, votre application mourra (je pense que lors de l'exécution, car les vues ne sont pas compilées).

[Correction: Sans Renderbody, la vue référençant cette disposition particulière mourra au moment de l'exécution. (Il est important de noter que la disposition est elle-même facultative.)]

Les sections sont des blocs de code définis dans votre vue avec des noms similaires

pourrait avoir un bloc de code correspondant dans votre vue.

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

Je souligne ( pourrait parce que la barre de navigation est supprimée required: false

Les sections sont un moyen pour chaque vue de partager un élément de fonctionnalité/balisage avec le _layout.

Suivi: Dans ma modeste période de développement MVC, j'ai appris à faire un usage modeste des sections.

  • Les sections sont utiles pour vous assurer que vos références JS sont placées dans votre section HTML (même s'il s'agit d'une pratique dépassée.
  • Les sections sont utiles pour les navs supérieur et latéral
  • Les sections jamais sont obligatoires. Cela rend votre code fragile!
15
Dave Alperovich

RenderBody est requis, car c'est ce qui rend chaque vue. RenderSection possède un paramètre facultatif qui vous permet de marquer la section comme non requise.

1
Tieson T.

ici est des informations de base sur RenderBody () et RenderPage ().

0
user632299