Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Article rédigé par Steve Smith et Dave Brock
Les pages et vues partagent fréquemment des éléments visuels et programmatiques. Cet article montre comment :
- Utilisez des dispositions courantes.
- Directives de partage.
- Exécutez du code commun avant de rendre des pages ou des vues.
Ce document décrit les dispositions des deux approches différentes de ASP.NET Core MVC : Razor pages et contrôleurs avec vues. Pour cette rubrique, les différences sont minimes :
- Razor Les pages se trouvent dans le dossier Pages .
- Les contrôleurs avec vues utilisent un dossier Views pour les vues.
Qu’est-ce qu’une mise en page ?
La plupart des applications web ont une disposition commune qui fournit à l’utilisateur une expérience cohérente au fur et à mesure qu’il navigue d’une page à l’autre. La disposition inclut généralement des éléments d’interface utilisateur courants tels que l’en-tête de l’application, les éléments de navigation ou de menu et le pied de page.
Les structures HTML courantes telles que les scripts et les feuilles de style sont également fréquemment utilisées par de nombreuses pages au sein d’une application. Tous ces éléments partagés peuvent être définis dans un fichier de disposition , qui peut ensuite être référencé par n’importe quelle vue utilisée dans l’application. Les gabarits réduisent le code redondant dans les vues.
Par convention, la disposition par défaut d’une application ASP.NET Core est nommée _Layout.cshtml. Les fichiers de disposition des nouveaux projets ASP.NET Core créés avec les modèles sont les suivants :
Razor Pages:
Pages/Shared/_Layout.cshtml
Contrôleur avec vues :
Views/Shared/_Layout.cshtml
La disposition définit un modèle de niveau supérieur pour les vues dans l’application. Les applications n'ont pas besoin de mise en page. Les applications peuvent définir plusieurs dispositions, avec différentes vues spécifiant différentes dispositions.
Le code suivant montre le fichier de mise en page d’un projet créé à partir d’un modèle, avec un contrôleur et des vues :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebApplication1</title>
<environment include="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment exclude="Development">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a asp-page="/Index" class="navbar-brand">WebApplication1</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-page="/Index">Home</a></li>
<li><a asp-page="/About">About</a></li>
<li><a asp-page="/Contact">Contact</a></li>
</ul>
</div>
</div>
</nav>
<partial name="_CookieConsentPartial" />
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© 2018 - WebApplication1</p>
</footer>
</div>
<environment include="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
crossorigin="anonymous"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
</script>
<script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>
@RenderSection("Scripts", required: false)
</body>
</html>
Définition d'une mise en page
Razor les vues possèdent une Layout propriété. Les vues individuelles spécifient une disposition en définissant cette propriété :
@{
Layout = "_Layout";
}
La disposition spécifiée peut utiliser un chemin d’accès complet (par exemple, /Pages/Shared/_Layout.cshtml ou /Views/Shared/_Layout.cshtml) ou un nom partiel (exemple : _Layout). Lorsqu’un nom partiel est fourni, le Razor moteur d’affichage recherche le fichier de disposition à l’aide de son processus de découverte standard. Le dossier où existe la méthode de gestionnaire (ou contrôleur) est d’abord recherché, suivi du dossier Partagé . Ce processus de découverte est identique au processus utilisé pour découvrir des vues partielles.
Par défaut, chaque disposition doit appeler RenderBody. Peu importe où l'appel à RenderBody est placé, le contenu de la vue sera affiché.
Rubriques
Une disposition peut éventuellement référencer une ou plusieurs sections, en appelant RenderSection. Les sections permettent d’organiser l’emplacement de certains éléments de page. Chaque appel à RenderSection peut spécifier si cette section est requise ou facultative :
<script type="text/javascript" src="~/scripts/global.js"></script>
@RenderSection("Scripts", required: false)
Si aucune section requise n’est trouvée, une exception est levée. Les vues individuelles spécifient le contenu à afficher dans une section à l’aide de la @sectionRazor syntaxe. Si une page ou une vue définit une section, elle doit être rendue (ou une erreur se produit).
Exemple de @section définition dans la vue Razor Pages :
@section Scripts {
<script type="text/javascript" src="~/scripts/main.js"></script>
}
Dans le code précédent, scripts/main.js est ajouté à la scripts section d’une page ou d’une vue. D’autres pages ou vues dans la même application peuvent ne pas nécessiter ce script et ne définiraient pas de section de scripts.
Le balisage suivant utilise le Tag Helper partiel pour rendre _ValidationScriptsPartial.cshtml :
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
Le balisage précédent a été généré par l'échafaudage Identity.
Les sections définies dans une page ou un affichage sont disponibles uniquement dans sa page de mise en page immédiate. Ils ne peuvent pas être référencés à partir de composants partiels, de composants d’affichage ou d’autres parties du système d’affichage.
Ignorer les sections
Par défaut, le corps et toutes les sections d’une page de contenu doivent tous être affichés par la page de mise en page. Le Razor moteur d’affichage applique cette opération en suivant si le corps et chaque section ont été rendus.
Pour indiquer au moteur d’affichage d’ignorer le corps ou les sections, appelez les méthodes IgnoreBody et IgnoreSection.
Le corps et chaque section d'une page Razor doivent être soit rendus, soit ignorés.
Importation de directives partagées
Les vues et les pages peuvent utiliser les directives _ViewImports.cshtml . Le _ViewImports fichier prend en charge les directives suivantes :
@addTagHelper@removeTagHelper@tagHelperPrefix@using@model@inherits@inject@namespace
Le fichier ne prend pas en charge d’autres Razor fonctionnalités, telles que les fonctions et les définitions de section.
_ViewImports.cshtml Exemple de fichier :
@using WebApplication1
@using WebApplication1.Models
@using WebApplication1.Models.AccountViewModels
@using WebApplication1.Models.ManageViewModels
@using Microsoft.AspNetCore.Identity
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Le _ViewImports.cshtml fichier d’une application ASP.NET Core MVC est généralement placé dans le dossier Pages (ou Vues). Un _ViewImports.cshtml fichier peut être placé dans n’importe quel dossier, auquel cas il ne sera appliqué qu’aux pages ou vues de ce dossier et à ses sous-dossiers.
_ViewImports les fichiers sont traités à partir du niveau racine, puis pour chaque dossier menant à l’emplacement de la page ou de la vue elle-même.
_ViewImports les paramètres spécifiés au niveau racine peuvent être remplacés au niveau du dossier.
Par exemple, supposons :
- Le fichier de niveau
_ViewImports.cshtmlracine inclut@model MyModel1et@addTagHelper *, MyTagHelper1. - Un fichier de sous-dossier
_ViewImports.cshtmlinclut@model MyModel2et@addTagHelper *, MyTagHelper2.
Les pages et les vues du sous-dossier auront accès aux Tag Helpers ainsi qu'au modèle MyModel2.
Si plusieurs _ViewImports.cshtml fichiers sont trouvés dans la hiérarchie de fichiers, le comportement combiné des directives est :
-
@addTagHelperet@removeTagHelper: toutes s'exécutent, dans l'ordre -
@tagHelperPrefix: le plus proche de la vue remplace tous les autres -
@model: le plus proche de la vue remplace tous les autres -
@inherits: le plus proche de la vue remplace tous les autres -
@using: tous sont inclus ; les doublons sont ignorés -
@inject: pour chaque propriété, celle qui est la plus proche de la vue annule toute autre sur le même nom de propriété
Exécution de code avant chaque affichage
Code à exécuter avant que chaque affichage ou page ne soit placé dans le _ViewStart.cshtml fichier. Par convention, le _ViewStart.cshtml fichier se trouve dans le dossier Pages (ou Vues). Les instructions répertoriées dans _ViewStart.cshtml sont exécutées avant chaque affichage complet (pas les dispositions et pas les vues partielles). Comme ViewImports.cshtml, _ViewStart.cshtml est hiérarchique. Si un _ViewStart.cshtml fichier est défini dans le dossier d’affichage ou de pages, il est exécuté après celui défini à la racine du dossier Pages (ou Vues) (le cas échéant).
_ViewStart.cshtml Exemple de fichier :
@{
Layout = "_Layout";
}
Le fichier ci-dessus spécifie que toutes les vues utilisent la _Layout.cshtml disposition.
_ViewStart.cshtml et _ViewImports.cshtmlne sont généralement pas placés dans le dossier /Pages/Shared (ou /Views/Shared). Les versions au niveau de l’application de ces fichiers doivent être placées directement dans le dossier /Pages (ou /Views).