RegisterClientScriptBlock 和 RegisterStartupScript 的区别以及它们如何与 AJAX Update Panel 配合使用





2.00/5 (1投票)
RegisterClientScriptBlock 和 RegisterStartupScript 的区别:- 我们通常在 aspx 页面上编写 javascript 函数。 如果我们想要动态
RegisterClientScriptBlock 和 RegisterStartupScript 的区别:-
我们通常在 aspx 页面上编写 javascript 函数。
如果我们想要动态脚本,那么我们不能在 aspx 页面上编写,因为在许多情况下,比如脚本可能需要从数据库中获取一些数据,或者任何只能从代码隐藏中完成的操作。
在这种情况下,我们可以使用 RegisterStartupScript 和 RegisterClientScriptBlock 函数从代码隐藏中在页面上包含 Javascript。
它们都用于相同的目的,但它们之间的区别如下:-
1) RegisterStartupScript 方法将 Javascript 添加到 web 表单的结尾 'form' 标签之前,而 RegisterClientScriptBlock 方法将 Javascript 添加到 web 表单中,位于起始 'form' 标签之后。
2) 当您想为任何元素赋值或获取其属性值时,可以使用 RegisterStartupScript 方法,而在 RegisterClientScriptBlock 方法的情况下,我们会得到一个错误,即“对象未定义”。
3) RegisterStartupScript 方法包含将在浏览器解析后立即运行的代码,而 RegisterClientScriptBlock 方法包含整个页面使用的例程和库。
示例 1
protected void Page_Load(object sender, EventArgs e)
{
if(!ClientScript.IsClientScriptBlockRegistered("RegisterClientScriptBlock"))
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "RegisterClientScriptBlock", "document.write ('RegisterClientScriptBlock');", true);
if (!ClientScript.IsStartupScriptRegistered("StartupScriptRegistered"))
ClientScript.RegisterStartupScript(this.GetType(), "StartupScriptRegistered", "document.write('RegisterStartupScript');", true);
}
传递给这两个方法的参数如下:
1) type - 要注册的 ClientScript 的类型。
2) key - 要注册的客户端脚本的键。
3) script - 要注册的客户端脚本字面量。
4) addScriptTags - 一个布尔值,指示是否添加脚本标签。
运行此页面后,输出将是:
RegisterClientScriptBlock
页面内容
RegisterStartupScript
我们使用 RegisterStartupScriptBlock 注册的脚本首先呈现,并且语句 document.write 将“RegisterClientScriptBlock”写入页面,然后我们有页面内容,最后是“StartupScriptRegistered”。
如果您查看源代码,
示例 2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
无标题页面
</title></head>
<body>
<form name="form1" method="post" action="UseIComprer.aspx" id="form2">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGT4JJog3qP93QeYemlckRLadGZVuw==" />
</div>
<script type="text/javascript">
document.write('RegisterClientScriptBlock');
</script>
<div>
<table>
<tr>
<td>
页面内容
</td>
</tr>
</table>
</div>
<script type="text/javascript">
document.write('StartupScriptRegistered');
</script>
</form>
</body>
</html>
RegisterClientScriptBlock 和 RegisterStartupScript 如何与 AZAX UpdatePanel 控件配合使用 :-
RegisterStartupScript 和 RegisterClientScriptBlock 都可以在正常的 Asp.Net 页面中正常工作。但是,如果我们在 Asp.Net AZAX Update Panel 中使用这两个函数,它们将无法工作。
例如:-
RegisterClientScriptBlock("alert", "<script language='javascript'>alert('Hello Smruti');</script>");
上述代码片段通常可以正常工作,但如果我们在 UpdatePanel 中使用它,则相同的代码将无法工作。
解决方案:-
要解决此问题,我们必须使用 ScriptManager,如下所示:
ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('Hello')", true);
参数如下:
Page - (System.Web.UI.Page) 正在注册客户端脚本块的页面对象。
type - (System.Type) 客户端脚本块的类型。
key - (System.Strig) 脚本块的唯一标识符。
script - (System.string) 脚本。
addScriptTags - (Syatem.Boolean) true 将脚本块括在 <script> 和 </script> 标签中;否则为 false。
ScriptManager 控件管理启用了 AZAX 的 Asp.Net 网页的客户端脚本。 默认情况下,ScriptManager 控件使用页面注册用于 Microsoft Azax 库的脚本。 这使客户端脚本可以使用类型系统扩展并支持部分页面呈现和 Web 服务调用等功能。
当页面包含一个或多个 UpdatePanel 控件时,ScriptManager 控件管理浏览器中的部分页面呈现。该控件与页面生命周期交互以更新 UpdatePanel 控件内的页面部分。