三者的区别在于,输出到HTML页面的位置不同。
Response.Write 输出的内容位于HTML的前面,如果脚本中引用HTML元素内容会因为找不到元素而报错。
RegisterClientScriptBlock 输出位于HTML 中<form>元素打开时,紧随系统元素。(如input 一些隐藏的元素,vieState等).
RegisterStartupScript 输出位置 HTML 中</form>元素闭合时,此时HTML中所有元素已经加载完成,可以进行任何操作。
若想尽快执行脚本,Response.Write 与RegisterClientScriptBlock是不错的选择,如果需要安全的引用HTML中的元素,最好使用
RegisterStartupScript.
源码如下:
Code
<script language='javascript'>
//Response.Write
alert('hello world!');</script>
<!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="Test.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMjgzMDgzOTgzZGS/CIquc9VYpJ1uN4VjJKhueBFUsg==" />
</div>
<script type="text/javascript">
//RegisterClientScriptBlock
//<![CDATA[
alert('hello world');//]]>
</script>
<input name="TextBox1" type="text" id="TextBox1" />
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgK5vtu8DwLs0bLrBqi1MZn10s1FxjQZig39rY9ehX5C" />
</div>
<script type="text/javascript">
//RegisterStartupScript
//<![CDATA[
alert('hello world');//]]>
</script>
</form>
</body>
</html>