Malheureusement, ce n'est pas possible par défaut pour utiliser section
tant qu'un autre utilisateur a suggéré, depuis un section
n'est disponible que pour l'immédiat, child
d'un View
.
Ce qui fonctionne, cependant, est la mise en œuvre et à la redéfinition de l' section
dans chaque vue, sens:
section Head
{
@RenderSection("Head", false)
}
De cette façon, chaque point de vue peut mettre en œuvre une section de tête, et pas seulement les enfants immédiats. Cela ne fonctionne que partiellement, et en particulier avec plusieurs partiels, les problèmes commencent (comme vous l'avez mentionné dans votre question).
Donc, la seule solution à votre problème à l'aide de l' ViewBag
. Le mieux serait probablement une autre collection (liste) pour les css et les scripts. Pour que cela fonctionne, vous devez vous assurer que l' List
utilisé est initialisé avant tout sur les points de vue sont exécutées. Ensuite, vous pouvez faire des choses comme ça dans la partie supérieure de chaque vue/partielle (sans s'occuper si l' Scripts
ou Styles
de la valeur est nulle:
ViewBag.Scripts.Add("myscript.js");
ViewBag.Styles.Add("mystyle.css");
Dans la mise en page vous pouvez ensuite une boucle à travers les collections et ajoutez les styles basés sur les valeurs de l' List
.
@foreach (var script in ViewBag.Scripts)
{
<script type="text/javascript" src="@script"></script>
}
@foreach (var style in ViewBag.Styles)
{
<link href="@style" rel="stylesheet" type="text/css" />
}
Je pense que c'est laid, mais c'est la seule chose qui fonctionne.
**Mise à JOUR**
Depuis que commence l'exécution de l'intérieur abord, et de travailler son chemin hors de la mise en page et les styles css sont en cascade, il serait probablement un sens à revers le style de la liste via ViewBag.Styles.Reverse()
.
De cette façon, la plus extérieure de style est ajouté en premier, qui est en ligne avec la façon dont les feuilles de style css de toute façon.