Y at-il une méthode de System.Web.UI.ClientScriptManager qui enregistre des scripts dans la balise ?
-
23-09-2019 - |
Question
Je sais qu'il est strictement OK pour mettre les balises <script>
dans le corps, mais dans l'intérêt de neatness Je voudrais utiliser System.Web.UI.ClientScriptManager
pour enregistrer un script dans la <head>
de ma page. Y at-il une méthode pour y parvenir?
Merci d'avance.
La solution
Dans ces cas, je l'habitude d'ajouter un ContentPlaceHolder dans la balise de ma page principale.
Sinon, je l'ai utilisé une méthode (habituellement dans une classe utilitaire ou classe PageBase) qui met la chaîne de script dans une liste et le stocke dans le contexte ASP.Net comme ceci:
List<string> javaScriptUrls = new List<string>();
url = url.ToLower();
javaScriptUrls = Context.Items[JS_KEY] as List<string>;
if (javaScriptUrls == null)
{
javaScriptUrls = new List<string>();
javaScriptUrls.Add(url);
}
else
{
if (!javaScriptUrls.Contains(url))
javaScriptUrls.Add(url);
}
Context.Items[JS_KEY] = javaScriptUrls;
Alors OnPreRender du MasterPage, il lit cette liste à partir du contexte et construit des balises dans l'en-tête.
List<string> _javaScript = Context.Items[JS_KEY] as List<string>;
foreach (string js in _javaScript)
{
HtmlGenericControl script = new HtmlGenericControl();
script.TagName = "script";
script.Attributes.Add("type", "text/javascript");
if (js.StartsWith("~/"))
script.Attributes.Add("src", head.ResolveUrl(js));
else
script.Attributes.Add("src", js);
head.Controls.Add(script);
AddHeaderLineBreak(head);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow