2010-01-27 37 views

回答

2

在这些情况下,我通常会在我的母版页的标签中添加一个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); 
      } 
+0

感谢您的彻底解答。这种解决方法意味着我不能使用“IsClientScriptIncludeRegistered”...我想你可以继续添加网址到列表中,然后只注册唯一条目。 – 2010-01-27 13:10:47

+0

正确。注意以下行: if(!javaScriptUrls.Contains(url.ToLower())) javaScriptUrls.Add(url); 在列表中保持唯一性 – hunter 2010-01-27 13:54:25