web-dev-qa-db-fra.com

Page MVC Layout VS MVC Master

Je commence à apprendre MVC4. Je suis tombé sur les deux possibilités de créer une vue basée sur un modèle Razor ou une page maître.

Je voudrais comprendre les différences pratiques entre les deux.

Pour l'instant, je peux voir que si je crée une vue à l'aide d'une page maître, je peux remplacer plusieurs sections. Par exemple, si mon maître définit un espace réservé "colonne de gauche" et un espace réservé "corps", je peux non seulement définir le corps pour une vue spécifique, mais je peux également afficher le contenu dans la section "colonne de gauche" par exemple pour afficher les contrôles qui sont liés au contexte dans lequel se trouve la page (d'une zone de recherche à une visionneuse de cotation boursière). De plus, les pages maîtres ne peuvent pas être définies en utilisant des modèles Razor, qui sont beaucoup moins verbeux que les autres syntaxes (partiellement faux: quelqu'un a réussi à pirater cet aspect).

Avec les mises en page Razor, je ne peux définir qu'un bloc contigu de la page qui peut être remplacé par une vue spécifique, et je dois utiliser plusieurs mises en page (rupture DRY) pour de petits changements dans d'autres parties de la page. Ma déclaration précédente est-elle correcte ou ai-je raté quelque chose?

Évidemment, je peux rendre le contenu dans n'importe quelle partie de la page en faisant bon usage de jQuery, mais c'est une autre question

19

Vous pouvez utiliser des sections avec Razor. Scott Gu a blogué à leur sujet ici: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

Dans votre mise en page, vous pouvez définir autant de sections que vous le souhaitez:

<div id="leftMenu">
    @RenderSection("LeftMenu", required: false)
</div>

que vous pouvez remplacer dans vos vues:

@section LeftMenu {
    <div>... here comes the left menu for this view ...</div>
}

Vous pouvez également tester si une section a été définie dans une vue et sinon fournir un contenu par défaut:

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu")
}
else { 
    <div>Some default left menu</div>
}
26
Darin Dimitrov

À partir de MVC3, le moteur de visualisation du rasoir a été introduit. À un niveau élevé, un moteur de vue est essentiellement ce qui prend la vue et rend le HTML nécessaire. Razor utilise le fichier _layout.cshtml et son propre système de modèles similaire aux pages maîtres. Cependant, MVC3 et 4 ont un autre moteur de vue appelé WebForms View Engine et celui-ci utilise des pages maîtres. Si vous regardez respectivement les tutoriels MVC1 et MVC2, vous verrez des pages maîtres. Avant MVC3, il n'y avait que WebForms View Engine.

Maintenant, en termes de fonctionnalités, les deux sont similaires. Les pages maîtres vous permettent de définir des espaces réservés de contenu tandis que Razor vous permet de définir des sections. La seule différence majeure entre les deux réside dans le rendu de la page. Les pages maîtres rendent la page à l'extérieur dans, ce qui signifie d'abord la page maître, puis les espaces réservés au contenu. Razor est, je crois, récursif et commence par les sections les plus intérieures et fonctionne à sa sortie.

Consultez cet article de blog pour plus d'informations sur les dispositions de rasoir: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections- avec-rasoir.aspx

En termes de celui qui est préféré, les deux moteurs de vue existent; mais si vous voulez utiliser la syntaxe du rasoir - que je recommande fortement - alors vous devez utiliser le système de disposition. Razor ne vous permet pas d'utiliser des pages maîtres.