使用 RegisterStartupScript() 和 RegisterClientScriptBlock() 添加客户端脚本块
System.Web.UI.Page 类包含的两个方法可以将客户端脚本代码发送到由 ASP.NET Web 页面提供的 HTML 中:
RegisterStartupScript(key, script)
RegisterClientScriptBlock(key, script)
这两个方法都接受两个字符串作为输入。第二个参数 script 是要插入到页面中的客户端脚本,包括 <script> 的起始标记和终止标记。第一个参数 key 是插入的客户端脚本的唯一标识符。
这两个方法唯一的不同之处在于从“何处”发送脚本块。RegisterClientScriptBlock() 在 Web 窗体的开始处(紧接着 <form runat="server"> 标识之后)发送脚本块,而 RegisterStartupScript() 在 Web 窗体的结尾处(在 </form> 标识之前)发送脚本块。
为什么会有两种不同的方法来发送客户端脚本?要更好地了解这一点,我们必须首先了解,客户端脚本可以分为两类:一类是在加载页面后立即运行的代码,一类是在发生某些客户端事件时才运行的代码。前者的常见示例是将焦点设置到文本框的客户端代码。例如,当您访问 Google 时,在页面加载后就会执行一小段客户端代码,以自动将焦点设置到搜索文本框。
以下是后一类代码(为响应客户端事件而运行的代码)的示例。具体而言,在该示例中,单击按钮时将显示一个弹出式对话框:
<html>
<body>
<form>
<script language="JavaScript">
<!--
function displayPopup() {
alert("Hello, world.");
}
// -->
</script>
<input type="button" value="Click Me!" onclick="displayPopup()" />
</form>
</body>
</html>
在这段代码中,<input> 标记中的 onclick="displayPopup()" 用于指明在单击按钮时,JavaScript 函数 displayPopup() 应该运行。
RegisterStartupScript() 方法可用于添加要在加载页面后运行的脚本块。通过这种方法添加的脚本块位于 Web 窗体的结尾处,因为必须在脚本运行前定义脚本要修改的 HTML 元素。也就是说,如果您要使用客户端脚本将焦点设置到文本框,必须确保文本框的 HTML 标记位于设置该文本框的焦点的脚本之前。例如,下面的 HTML 将显示一个文本框,并将焦点设置到该文本框:
<input type="text" id="myTextBox" />
<script language="JavaScript&qu