Desidero collegare un foglio di stile specifico in determinate viste oltre a ciò che viene già collegato in _Layout.cshtml. Per i non-Razor, vedo usare il content place place. Come lo farei per Razor?Come è possibile avere un contenuto specifico per la vista <head> utilizzando Asp.Net MVC 3 e Razor?
Come è possibile avere un contenuto specifico per la vista <head> utilizzando Asp.Net MVC 3 e Razor?
risposta
L'equivalente di segnaposto contenuto in Rasoio sono sezioni.
Nel vostro _Layout.cshtml:
<head>
@RenderSection("Styles", required: false)
</head>
Poi, nel tuo pagina di contenuto:
@section Styles {
<link href="@Url.Content("~/Content/StandardSize.css")" />
}
Una soluzione alternativa sarebbe quella di mettere gli stili in ViewBag/Viewdata:
Nel tuo _Layout.cshtml:
<head>
@foreach(string style in ViewBag.Styles ?? new string[0]) {
<link href="@Url.Content(style)" />
}
</head>
E nella tua pagina di contenuto:
@{
ViewBag.Styles = new[] { "~/Content/StandardSize.css" };
}
Questo funziona perché la pagina di visualizzazione viene eseguito prima del layout.
Sorprendentemente (per me), asp: ContentPlaceHolder funziona. Sembra molto spiacevole però. Mi chiedo se c'è un altro modo?
In particolare, si mette <asp:ContentPlaceHolder ID="HeadContent" runat="server" />
nel vostro _layout.cshtml e
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<link href="@Url.Content("~/Content/StandardSize.css")" rel="stylesheet" type="text/css" />
</asp:Content>
nella vista.
Ti sembra solo che funzioni. Hai guardato l'HTML generato? – marcind
Hai ragione. Ho appena visto che sono stati applicati gli stili che volevo ma non ho controllato l'HTML. Mi stavo chiedendo come veniva elaborato un tag del server con Razor. – JohnOpincar
Questo è anche un ottimo modo per aggiungere riferimenti di script specifici alla vista. – ReinierDG
La soluzione alternativa è buona per le persone che non hanno ancora convertito la loro soluzione per utilizzare Razor. Grazie! – Mayo