在 AJAX 局部回发期间添加 JavaScript 和 CSS
本文将展示如何在 AJAX 部分回发响应中注入 JavaScript 和 CSS。
引言
本文将展示如何在 AJAX 部分回发响应中注入 JavaScript 和 CSS。如果您已经开始使用 AJAX,您可能已经注意到,在 AJAX 回发期间,只有 UpdatePanel 中的项目会被刷新。 这被称为 AJAX 部分回发或 AJAX 部分页面呈现。如果您以编程方式插入代码,例如自定义 JavaScript 或 CSS,用于您在 UpdatePanel 中的用户控件,您可能已经注意到,CSS 或 JavaScript 没有在部分回发响应期间发送回客户端的浏览器。 这适用于仅在部分回发响应中发送的新代码。
问题分析
出现上述情况的原因是,我们过去用于以编程方式将代码插入回发的一些旧方法不再适用于 AJAX 部分回发。 这些方法是在 AJAX 出现之前开发的。 在 AJAX 部分回发期间不起作用的对象示例有:
// ClientScript (ClientScriptManager class)
// will not work on an ajax partial postback
ClientScript.RegisterStartupScript(...)     
// Page.Header.Controls.Add will not work on an ajax partial postback 
Page.Header.Controls.Add(...);
解决方案
解决方案称为 ScriptManager。 ScriptManager 方法基本上相同,但需要一个额外的参数,即页面或控件。 ScriptManager 会在 AJAX 部分回发期间将所有内容发送回客户端。 因此,如果我们需要注入 JavaScript,我们必须利用 ScriptManager 对象。
示例 1:插入 JavaScript
要插入 JavaScript,请使用 RegisterStartupScript 方法,如下所示
// Javascript "Hello World" alert box using RegisterStartupScript 
ScriptManager.RegisterStartupScript(this,
                                    typeof(nameOfPageOrControl),
                                    "typeAUniqueScriptNameHere1",
                                    "alert('Hello World');", true);
请注意,如果您将脚本放置在用户控件中,nameOfPageOrControl 将是用户控件的名称,否则为页面类名称。
示例 2:插入 JavaScript 包含文件
要插入 JavaScript 包含文件,请使用 RegisterClientScriptInclude 方法,如下所示
// Register a Javascript include file during a partial postback
ScriptManager.RegisterClientScriptInclude(this,
                                          typeof(nameOfPageOrControl),
                                          "typeAUniqueScriptNameHere2",
                                          ResolveUrl("~") + "myscript.js");
同样,如果您将脚本放置在用户控件中,nameOfPageOrControl 将是用户控件的名称,否则为页面类名称。
示例 3:插入 CSS 包含文件
要插入 CSS 包含文件,请使用 RegisterClientScriptBlock 方法,如下所示
// Register a CSS file during a partial postback
ScriptManager.RegisterClientScriptBlock(this,
                                        typeof(nameOfPageOrControl),
                                        "typeAUniqueScriptNameHere3",
                                        "<link href='" +
                                        ResolveUrl("~") +
                                        "mystyle.css' rel='stylesheet' type='text/css' />",
                                        false);
同样,如果您将脚本放置在用户控件中,nameOfPageOrControl 将是用户控件的名称,否则为页面类名称。 另外,请注意最后一个参数设置为 false。 当此参数为 false 时,脚本块不会放置在代码中,因为 CSS 不使用脚本块。
关于 CSS 和示例 3 代码的注意事项
在某些情况下,上述示例 3 可能需要用脚本标签包装,并且添加脚本标签的最后一个参数设置为 true 而不是 false
string script1;
string script2;
script1 = "<link href='" +
          ResolveUrl("~") +
          "mystyle.css' rel='stylesheet' type='text/css' />";
script2 = "//]]></script>" +
          script1 +
          "<script type=\"text/javascript\">//<


