在asp.net页面中包含脚本的正确方法

时间:2010-07-07 19:26:29

标签: asp.net javascript scriptmanager

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

一些脚本管理器本身包含脚本<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);
}

VS

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

VS

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

3 个答案:

答案 0 :(得分:7)

<asp:scriptreference>是调用ScriptManager.RegisterScriptBlock()的声明等价物,就像任何其他asp.net控件声明类似于编写程序Controls.Add()

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

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

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

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:1)

我建议使用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