2009-10-26 5 views
0

J'essaie actuellement de trouver un bon moyen de charger mes fichiers javascript uniquement lorsque j'en ai besoin. Pour ce faire, j'ai créé plusieurs HtmlHelpers pour faceboxlinks, datepickerfields, tinymcefields et d'autres scripts qui ont besoin d'un js externe et d'une expression jquery d'initialisation. Dans ces aides, j'exécute le script en utilisant getScript() de jQuery et utilise sa fonction de rappel pour initer le script.Suivi des scripts chargés par page à l'aide de ViewData

Maintenant, mon problème vient. Ma première idée était de garder une trace de ces scripts dans une liste de chaînes et de mettre cela dans htmlHelper.ViewData. Mais, malheureusement, cela échoue. Pour une raison quelconque, ce viewdata n'est pas transmis à des vues partielles ou quelque chose de similaire; il ne conserve pas la liste ..

Existe-t-il un autre endroit où je peux globalement conserver ma liste de chaînes au lieu du ViewDataDictionary de l'assistant, ou est-ce que j'utilise cette ViewData de manière incorrecte et dois-je la transmettre pour certaines raisons? Toute clarification ou aide serait très appréciée!

Répondre

0

Vous pouvez utiliser la collection HttpContext.Current.Items pour stocker les données pertinentes pour la demande en cours. Cependant, je pense que vous devriez repenser votre architecture, afin qu'elle ne repose pas sur des variables globales (que ViewData et Items finissent par être dans votre cas).

Jetez un oeil à ceci: How do I add JavaScript to an ASP.NET MVC View? et similaire.

+0

Merci! L'utilisation de HttpContext.Current.Items a fait l'affaire. Pour l'instant, cela résout mon problème. Quels pourraient être les inconvénients de s'appuyer sur des variables globales dans ce genre de situations? Je ne suis pas très enthousiaste à l'idée de devoir définir et initialiser mes scripts dans toutes les vues que j'utilise. – Leon

+0

Lorsque vous utilisez une variable globale, vous ignorez les contraintes architecturales, donc il est théoriquement plus difficile de supporter un tel code. Vous n'avez pas besoin d'initialiser tous vos scripts à la fois, vous pouvez le faire à la demande comme vous le faites maintenant, mais ajoutez le code d'initialisation à l'espace réservé approprié dans le conteneur, qui est ensuite ajouté à la page maître. De cette façon, votre page maître n'a rien à "savoir" sur les vues. –

+0

Je vois, merci d'avoir éclairci ça :) – Leon

Questions connexes