Есть ли метод System.Web.UI.ClientScriptManager, который регистрирует скрипты внутри тега <head>? - PullRequest
1 голос
/ 27 января 2010

Я знаю, что это нормально для размещения тегов <script> в теле, но в интересах аккуратности я бы хотел использовать System.Web.UI.ClientScriptManager для регистрации скрипта на <head> моей страницы. Есть ли способ сделать это?

Заранее спасибо.

1 Ответ

2 голосов
/ 27 января 2010

В этих случаях я обычно добавляю 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);
            }
...