【问题标题】:Reference stylesheet/spcript from User Control从用户控件参考样式表/脚本
【发布时间】:2013-01-04 19:49:51
【问题描述】:

我知道有人问过这个问题,但我有一个比其他相关问题更复杂的问题。

我需要从我的用户控件中引用 CSS 和 JS。

引用必须在<head> 标记内呈现。因此我不能使用ScriptManager.RegisterClientScriptBlock

我找到的其他解决方案:

    HtmlLink link = new HtmlLink();
    link.Href = "/path/style.css";
    link.Attributes["type"] = "text/css";
    link.Attributes["rel"] = "stylesheet";
    Page.Header.Controls.Add(link);

但是这会导致 “无法修改 Controls 集合,因为该控件包含代码块” 问题是那些代码块位于我无法控制的母版页文件中。因此,this thread 中建议的解决方法是不可能的。 (例如:将代码块包装在 <asp:placeholder ID="Placeholder1" runat="server"> 中或将 <%= 替换为 <%#

那么考虑到上述限制,是否可以将<link href='path' /><script src='path' /> 放在用户控制的<head> 标记内?

【问题讨论】:

    标签: c# asp.net user-controls


    【解决方案1】:

    对我有用的解决方案:

    嵌套母版页,并将占位符添加到嵌套母版页,然后按照 jon 的建议添加文字控件:

    stylePlaceholder = ((PlaceHolder)((ContentPlaceHolder)Page.Master.Master.FindControl("HeadSection")).FindControl("phd_ControlsStyles"));
    
    stylePlaceholder.Controls.Add(new LiteralControl(css + " href=\"http://" + cdn + "/Utils/Bundle/" + getCss() + ".css?v=" + settings["subVersion"] + "\" />"));
    

    【讨论】:

      【解决方案2】:

      您可以在头部添加一个 LiteralControl。

      Page.Header.Controls.Add(new LiteralControl("<script src'...'></script"));
      

      【讨论】:

      • 仍然产生相同的错误:“无法修改控件集合,因为控件包含代码块(即 )。” b>
      猜你喜欢
      • 2011-02-18
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      相关资源
      最近更新 更多