32 votes

Comment puis-je avoir une vue spécifique <head> sommaire Utiliser Asp.Net MVC 3 et Razor?

Je veux lier une feuille de style spécifique dans certaines vues en plus de ce qui est déjà lié dans _Layout.cshtml. Pour les non-Razor, je vois l'utilisation de l'espace réservé au contenu. Comment pourrais-je faire cela pour Razor?

45voto

marcind Points 38002

L'équivalent des espaces réservés de contenu dans Razor sont des sections.

Dans votre _Layout.cshtml:

 <head>
@RenderSection("Styles", required: false)
</head>
 

Puis dans votre page de contenu:

 @section Styles {
    <link href="@Url.Content("~/Content/StandardSize.css")" />
}
 

Une solution alternative serait de mettre vos styles dans ViewBag / ViewData:

Dans votre _Layout.cshtml:

 <head>
    @foreach(string style in ViewBag.Styles ?? new string[0]) {
        <link href="@Url.Content(style)" />
    }
</head>
 

Et dans votre page de contenu:

 @{
    ViewBag.Styles = new[] { "~/Content/StandardSize.css" };
}
 

Cela fonctionne car la page de vue est exécutée avant la mise en page.

-2voto

JohnOpincar Points 1798

Étonnamment (pour moi), asp: ContentPlaceHolder fonctionne. Semble très imperturbable cependant. Je me demande s'il y a un autre moyen?

Plus précisément, vous mettez <asp:ContentPlaceHolder ID="HeadContent" runat="server" /> dans votre _layout.cshtml et

 <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
    <link href="@Url.Content("~/Content/StandardSize.css")" rel="stylesheet" type="text/css" />
</asp:Content>
 

à votre avis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X