【问题标题】:Proper way to include scripts in an asp.net page在 asp.net 页面中包含脚本的正确方法
【发布时间】:2010-07-07 19:26:29
【问题描述】:

我有一个 ASP.NET 应用程序,它混合使用了 ASP.NET AJAX(包括 UpdatePanel)和由不同背景的几位开发人员编写的 jQuery。

有些在 ScriptManager 本身中包含脚本 <asp:ScriptManager><Scripts><asp:ScriptReference....,而有些在后面的代码中使用 Page.ClientScript.RegisterClientScriptInclude,还有一些直接使用 <script src=""> 来包含脚本。

如果可能的话,我想整合到一种单一的方式来处理这个问题,但我不确定每种方式的优缺点是什么以及首选哪种方式。


一个例子是:

protected override void Render(HtmlTextWriter writer)
 {
    Page.ClientScript.RegisterClientScriptInclude("jQuery", ResolveClientUrl("~/scripts/jquery/js/jquery-1.4.2.min.js"));    
    base.Render(writer);
}

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/scripts/jquery/js/jquery-1.4.2.min.js" />
    </Scripts>
</asp:ScriptManager>

<script src="Scripts/jQuery/js/jquery-1.4.2.min.js" type="text/javascript"></script>

【问题讨论】:

    标签: asp.net javascript scriptmanager


    【解决方案1】:

    &lt;asp:scriptreference&gt; 是调用 ScriptManager.RegisterScriptBlock() 的声明式等价物,就像任何其他 asp.net 控件声明都类似于执行程序化 Controls.Add()

    话虽如此,确实没有“首选方式”。如果您正在构建可分发的 Web 控件,那么您将希望从控件的设置例程中调用各种 .RegisterScript...() 方法,而不是依赖于必须添加标记的用户。

    如果您只想在网站中包含脚本,使用标记方法可能更方便。

    如果您在 Ajax 调用期间添加脚本,那么您可能希望使用 ScriptManager 来执行此操作。如果您要在常规回发中添加脚本,那么您需要使用 ClientScriptManager 来执行此操作。

    所以...很难列举利弊。在您的情况下,如果您不构建可再分发代码,那么最明显和最直接的方法是通过标记包含脚本引用,因为它往往更明显。但我不确定您是否能够将每一个事件合并到一个方法中,因为所有方法的存在都是有原因的,而且您可能需要使用多个。

    【讨论】:

    • 很好的答案。这让我更好地了解何时使用每种方法,在我的情况下,它只是在网站中包含脚本。我认为我们的脚本包含在获取和发布之间没有区别。
    【解决方案2】:

    并非总是可以在标记中包含所有脚本。
    如果脚本依赖于动态数据,那么您需要从后面的代码中“注入”脚本。

    我的规则是尽可能避免从后面的代码中“注入”脚本,并且仅将其用作最后的手段。

    编辑:
    如果您有许多不同的脚本文件,则首选使用 scriptmanager。
    使用 scriptmanager 时,所有脚本都将“连接”到一个文件中。这会影响浏览器下载脚本的方式。浏览器通常有 2 个并发连接的限制,如果您有 10 个脚本,那么您需要分 5 步下载它们。 Scriptmanager 将确保这一切都在一个步骤中发生。

    【讨论】:

    • 没有什么依赖于动态数据,所以我更愿意将它们移动到标记中。我的直觉是把它们放在 ScriptManager 中会“更好”,但我没有任何支持。
    【解决方案3】:

    我会推荐 Ajax 脚本加载器(如果您在 asp.net、asp.net ajax 库、jquery 环境中工作)

    http://www.asp.net/ajaxlibrary/Ajax%20Script%20Loader.ashx

    http://www.asp.net/ajaxlibrary/HOW%20TO%20Combine%20Scripts%20using%20the%20Script%20Loader.ashx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 2020-12-20
      相关资源
      最近更新 更多