¿Hay un método System.Web.UI.ClientScriptManager que registra las secuencias de comandos dentro de la etiqueta ?
-
23-09-2019 - |
Pregunta
Sé que es estrictamente OK para poner etiquetas <script>
en el cuerpo, pero en aras de la pulcritud me gustaría uso System.Web.UI.ClientScriptManager
registrar un script en el <head>
de mi página. ¿Hay un método para lograr esto?
Gracias de antemano.
Solución
En estos casos, por lo general añadir un ContentPlaceHolder en la etiqueta de mi página maestra.
Como alternativa He utilizado un método (por lo general en una clase de utilidad o una clase de PageBase) que pone la cadena de secuencia de comandos en una lista y lo almacena en el contexto ASP.Net así:
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;
A continuación, OnPreRender del MasterPage, se lee la lista del Contexto y construye las etiquetas en la cabecera.
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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow