Существует ли метод System.Web.UI.ClientScriptManager, который регистрирует скрипты внутри тега <head>?
Я знаю, что это нормально, чтобы поставить <script>
теги в теле, но в интересах аккуратности я бы хотел использовать System.Web.UI.ClientScriptManager
зарегистрировать скрипт в <head>
моей страницы. Есть ли способ сделать это?
Заранее спасибо.
1 ответ
Решение
В этих случаях я обычно добавляю ContentPlaceHolder в тег моей мастер-страницы.
В качестве альтернативы я использовал метод (обычно в служебном классе или классе PageBase), который помещает строку сценария в список и сохраняет ее в контексте ASP.Net следующим образом:
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;
Затем OnPreRender MasterPage, он читает этот список из контекста и создает теги в заголовке.
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);
}