65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconemptyStarIconemptyStarIconemptyStarIcon

2.00/5 (1投票)

2013 年 10 月 11 日

CPOL

3分钟阅读

viewsIcon

31111

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 控件内的页面部分。

 

© . All rights reserved.