C#从代码后面添加页脚中的外部脚本(Sitecore)

Fil*_*ans 1 .net javascript c# sitecore

如何向页脚添加外部脚本引用?我知道如何将它添加到标题中,如下面的代码,但它需要在页面的底部.

private void Page_Load(object sender, EventArgs e)
{
   if (!Sitecore.Context.PageMode.IsPageEditor)
   {
      var javascriptRef = new LiteralControl("<script src=\"/js/vendor/jquery.bxslider.min.js\"></script>");
      Page.Header.Controls.Add(javascriptRef);          
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以在aspx文件中添加以下代码行(在body标记的末尾添加一个Literal控件):

 <asp:Literal runat="server" ID="litScript"/>
 </body> 
Run Code Online (Sandbox Code Playgroud)

从后面的代码中您有:

private void Page_Load(object sender, EventArgs e)
{
   if (!Sitecore.Context.PageMode.IsPageEditor)
   {
     litScript.Text="<script src=\"/js/vendor/jquery.bxslider.min.js\"></script>";

   }
}
Run Code Online (Sandbox Code Playgroud)


zzz*_*Bov 5

对于单个控件/子布局控制它们包含在页面上的脚本的项目,我通常用于Page.ClientScript管理脚本包含.

ClientScriptManager有一些有用的方法可以在页面中包含脚本,并通过比较类型和脚本名称来检测是否已经包含脚本,这样就不会多次包含脚本(可能很适合处理依赖项,但我更喜欢使用requirejs).

三种主要的脚本注册方法是:

  • RegisterClientScriptBlock
  • RegisterClientScriptInclude
  • RegisterStartupScript
RegisterClientScriptBlock 将脚本转储到页面顶部
Page.ClientScript
    .RegisterClientScriptBlock(
         GetType(),
         scriptName,
         "<script>alert('do stuff');</script>");
Run Code Online (Sandbox Code Playgroud) RegisterClientScriptInclude转储<script src="">在页面顶部
Page.ClientScript
    .RegisterClientScriptInclude(
         GetType(),
         scriptName,
         "path/to/scriptname.js");
Run Code Online (Sandbox Code Playgroud) RegisterStartupScript 转储页面底部的脚本
Page.ClientScript
    .RegisterStartupScript(
         GetType(),
         scriptName,
         "<script>alert('do stuff');</script>");
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有本机RegisterStartupScriptInclude允许将外部脚本添加到页面底部,所以我编写了一个扩展方法:

public static class ClientScriptManagerExtensions
{
    /// <summary>
    /// Registers the startup script with the <see cref="Page"/> object using a type,
    /// a key, and a url
    /// </summary>
    /// <param name="source">
    /// The <see cref="ClientScriptManager"/> with which the script should be registered
    /// </param>
    /// <param name="type">The type of startup script to register</param>
    /// <param name="key">The key of the startup script to register</param>
    /// <param name="url">The url of the startup script include to register</param>
    public static void RegisterStartupScriptInclude(this ClientScriptManager source,
                                                    Type type,
                                                    string key,
                                                    string url)
    {
        if (source == null)
            throw new ArgumentNullException("source");
        var script = string.Format(@"<script src=""{0}""></script>", HttpUtility.HtmlEncode(url));
        source.RegisterStartupScript(type, key, script);
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许开发人员注册外部脚本,以便在</form>元素结束时执行,这往往足够接近</body>性能.

Page.ClientScript.RegisterStartupScriptInclude(Page.GetType(), "jquery", "path/to/jquery.js");
Page.ClientScript.RegisterStartupScriptInclude(GetType(), "mycontrol", "path/to/mycontrol.js");
Run Code Online (Sandbox Code Playgroud)