日期:2011-08-22 浏览次数:20476 次
Scott Mitchell
2003 年 8 月
适用于:
Microsoft® ASP.NET
前提条件:本文假设读者熟悉 ASP.NET。
难度: 2
摘要:尽管从技术角度讲,ASP.NET 服务器控件的所有功能都可以在服务器端执行,但通常情况下通过添加客户端脚本可以大大增强服务器控件的可用性。本文将探讨服务器控件发送客户端脚本的两种方法,还将构建两个使用这些技术的服务器控件:PopupGreeting,一个在首次加载的 Web 页面上显示带有特定消息的客户端模式对话框的服务器控件;ConfirmButton,一个增强的 Button Web 控件,如果用户点击此按钮,则在发回 Web 窗体前向用户显示一个 JavaScript confirm() 的对话框。(本文包含一些指向英文站点的链接。)
下载 InjectingClientSideScript.msi。
目录
简介
使用 RegisterStartupScript() 和 RegisterClientScriptBlock() 添加客户端脚本块
探讨 IsStartupScriptRegistered() 和 IsClientScriptBlockRegistered()
从 ASP.NET 服务器控件发送客户端脚本块
发送 ASP.NET 服务器 Web 控件的 HTML 属性
小结
简介
尽管从技术角度讲,Microsoft® ASP.NET 服务器控件的所有功能都可以在服务器端执行,但通常情况下通过添加客户端脚本可以大大增强服务器控件的可用性。例如,ASP.NET 验证 Web 控件可以在服务器端执行所有的验证检查。但是,对于高版本浏览器,验证 Web 控件也会发送客户端脚本,以在客户端进行验证。这就是说,这些浏览器的用户可以获得响应效果更好的动态体验。
在开发 ASP.NET 服务器控件时,您不妨问问自己,如何才能通过使用客户端脚本来增强可用性。一旦找到可行的方案,其他要做的就是增强服务器控件的功能,以使其发送合适的客户端脚本。
ASP.NET 服务器控件可以发送两种客户端脚本:
客户端脚本块
客户端 HTML 属性
客户端脚本块通常是用 JavaScript 编写的,其中通常包含在发生特定的客户端事件时执行的函数。客户端 HTML 属性提供将客户端事件与客户端脚本联系在一起的方法。例如,以下的 HTML 页面中包含了客户端脚本块,脚本块中包含了名为 doClick() 的函数。该页面同时还包含一个按钮(通过 <input> HTML 元素创建),这个按钮的 onclick 属性与 doClick() 函数绑定。也就是说,只要用户单击该按钮,就开始执行 doClick() 函数中的客户端代码。在本示例中,将显示一个弹出式对话框(图 1)。
<html>
<body>
<form>
<script language="JavaScript">
<!--
function doClick() {
alert("You clicked me!");
}
// -->
</script>
<input type="button" value="Click Me!" />
</form>
</body>
</html>
图 1 是单击“Click Me!”按钮时 HTML 页面的屏幕快照。
图 1:单击“Click Me!”按钮时显示的弹出式对话框
对于以上 HTML 页面中的客户端脚本,有几点值得注意。首先,客户端脚本块包含在 HTML 注释(<!-- 和 -->)中。之所以这样,是因为如果不将脚本块放入 HTML 注释中,那些不能识别脚本的旧式浏览器就会显示 <script> 块的内容。此外,还要注意,脚本块中 HTML 注释的结束标记前有一个 JavaScript 注释,即 //。这是因为旧版本的 Netscape 在遇到 --> 时,会抛出 JavaScript 分析异常,因此必须将其注释掉。幸运的是,现代的浏览器已不需要这一额外操作,所以在为 Intranet 或其他由浏览器控制的环境开发 Web 页面时,您就不必采取此类预防措施了。
如果您对客户端脚本不是很熟悉,alert(string) 函数的作用就是显示一个模式弹出式对话框,对话框中包含的消息由 string 参数指定。所有 HTML 元素都有若干个可以绑定一段客户端 JavaScript 代码的客户端属性(例如,onclick、onmouseover、onmouseout、onfocus 和 onblur 等等)。例如,在上面的 HTML 页面中,<input> 元素的 onclick 属性绑定到 doClick() 函数,因此在单击该按钮时将执行 doClick() 函数。有关 JavaScript 事件及其关联的 HTML 属性的列表,请参阅 Introduction to Dynamic HTML 一文。有关客户端 JavaScript 的详细信息,请参阅 HTML and Dynamic HTML 一文。
在本文中,我们将学习如何在 ASP.NET 服务器控件中发送客户端脚本块和 HTML 元素属性。我们首先讨论如何使用 System.Web.UI.Page 类中的两个方法来向 ASP.NET Web 页面添加客户端脚本块,这两个方法是 RegisterStartupScript() 和 RegisterClientScriptBlock()。掌握这一知识后,我们将构建一个简单的服务器控件,让这个控件在每次加载页面时显示一个客户端弹出式对话框。之后,我们再来了解如何将 HTML 属性添加到 ASP.NET 服务器控件的 HTML 元素。最后,我们将归纳所有知识,实际构建一个 ConfirmButton Web 控件,当单击这个控件时,将向用户提示一个对话框,询问用户是否要继续。
使用 RegisterStartupScript() 和 RegisterClientScriptBlock() 添加客户端脚本块
System.Web.UI.Page 类包含的两个方法可以将客户端脚本代码发送到由 ASP.NET Web 页面提供的 HTML 中:
RegisterStartupScript(key, script)
RegisterClientScriptBlock(key, script)
这两个方法都接受两个字符串作为输入。第二个参数 scr