Je souhaite conserver tout mon code JavaScript dans une seule section; juste avant la fermeturebody
balise de dans ma page de mise en page principale et je me demande simplement ce qu'il y a de mieux, style MVC.
Par exemple, si je crée un DisplayTemplate\DateTime.cshtml
fichier qui utilise le sélecteur DateTime de jQuery UI, j'incorporerais le JavaScript directement dans ce modèle, mais il rendra le milieu de la page.
Dans mes vues normales, je peux simplement utiliser @section JavaScript { //js here }
puis @RenderSection("JavaScript", false)
dans ma mise en page principale, mais cela ne semble pas fonctionner dans les modèles d'affichage / éditeur - des idées?
Réponses:
Vous pouvez procéder à une conjonction de deux assistants:
puis dans votre
_Layout.cshtml
:et quelque part dans un modèle:
la source
sections
. Dans MVC4, le bundling pourrait en effet être utilisé et il permet de réduire la taille des scripts.head
balise plutôt qu'à la fin de labody
balise, car@Html.RenderScripts()
elle sera exécutée avant votre vue partielle et donc avant@Html.Script()
.Version modifiée de la réponse de Darin pour assurer la commande. Fonctionne également avec CSS:
Vous pouvez ajouter des ressources JS et CSS comme ceci:
Et affichez les ressources JS et CSS comme ceci:
Vous pouvez faire une vérification de chaîne pour voir si elle commence par un script / lien afin de ne pas avoir à définir explicitement ce qu'est chaque ressource.
la source
J'ai rencontré le même problème, mais les solutions proposées ici ne fonctionnent bien que pour ajouter une référence à la ressource et ne sont pas très adaptées au code JS en ligne. J'ai trouvé un article très utile et enveloppé tous mes JS en ligne (ainsi que les balises de script) dans
Et dans la vue _Layout placée
@Html.PageScripts()
juste avant la fermeture de la balise 'body'. Fonctionne comme un charme pour moi.Les aides eux-mêmes:
la source
J'ai aimé la solution publiée par @ john-w-harding, alors je l'ai combinée avec la réponse de @ darin-dimitrov pour créer la solution probablement trop compliquée suivante qui vous permet de retarder le rendu de tout html (scripts également) dans un bloc d'utilisation.
USAGE
Dans une vue partielle répétée, n'incluez le bloc qu'une seule fois:
Dans une vue partielle (répétée?), Incluez le bloc à chaque fois que le partiel est utilisé:
Dans une vue partielle (répétée?), Incluez le bloc une seule fois, puis rendez-le spécifiquement par son nom
one-time
:Rendre:
CODE
la source
Installez le package nuget Forloop.HtmlHelpers - il ajoute des aides pour la gestion des scripts dans les vues partielles et les modèles d'éditeur.
Quelque part dans votre mise en page, vous devez appeler
Ce sera là où tous les fichiers de script et blocs de script seront affichés dans la page, je vous recommande donc de le placer après vos principaux scripts dans la mise en page et après une section de scripts (si vous en avez une).
Si vous utilisez The Web Optimization Framework avec bundling, vous pouvez utiliser la surcharge
afin que cette méthode soit utilisée pour écrire des fichiers de script.
Désormais, à chaque fois que vous souhaitez ajouter des fichiers de script ou des blocs dans une vue, une vue partielle ou un modèle, utilisez simplement
Les assistants veillent à ce qu'une seule référence de fichier de script soit rendue si elle est ajoutée plusieurs fois et garantit également que les fichiers de script sont rendus dans un ordre attendu, c'est-à-dire
la source
Cet article m'a vraiment aidé, alors j'ai pensé publier ma mise en œuvre de l'idée de base. J'ai introduit une fonction d'assistance qui peut renvoyer des balises de script à utiliser dans la fonction @ Html.Resource.
J'ai également ajouté une classe statique simple afin que je puisse utiliser des variables typées pour identifier une ressource JS ou CSS.
Et en cours d'utilisation
Merci à @Darin Dimitrov qui a fourni la réponse en ma question ici .
la source
La réponse donnée dans Remplir une section de rasoir à partir d'un partiel à l'aide de
RequireScript
HtmlHelper suit le même modèle. Il a également l'avantage de vérifier et de supprimer les références en double à la même URL Javascript, et il a un explicitepriority
paramètre qui peut être utilisé pour contrôler l'ordre.J'ai étendu cette solution en ajoutant des méthodes pour:
J'aime les solutions de Darin & eth0 car elles utilisent le
HelperResult
modèle, qui permet des scripts et des blocs CSS, pas seulement des liens vers des fichiers Javascript et CSS.la source
@Darin Dimitrov et @ eth0 réponses à utiliser avec l'utilisation de l'extension de bundle:
la source