是否有一个System.Web.UI.ClientScriptManager方法在标记内注册脚本?

时间:2010-01-27 10:35:16

标签: asp.net javascript clientscriptmanager

我知道将<script>标签放在正文中是完全可以的,但为了整洁,我想使用System.Web.UI.ClientScriptManager在我的<head>中注册一个脚本页。有没有办法实现这个目标?

提前致谢。

1 个答案:

答案 0 :(得分:2)

在这些情况下,我通常会在主页面的标签中添加一个ContentPlaceHolder。

或者我使用了一个方法(通常在实用程序类或PageBase类中),它将脚本字符串放在List中,并将其存储在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;

然后是MasterPage的OnPreRender,它从Context中读取此List并在标题中构建标记。

            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);
            }