本文共 3414 字,大约阅读时间需要 11 分钟。
RegisterClientScriptBlock、RegisterStartupScript 都是注册一个脚本块。
它们的区别就是 RegisterClientScriptBlock 是注册在 body 最前面,而 RegisterStartupScript 是注册在 body 最后面。
为什么这样呢?一些优化性能的文章说,script 要放在 body 最后加载,但根据一些应用的实际情况,必须得在最初加载 script,这时就得用 RegisterClientScriptBlock 了。
第二个参数 key 是用来避免重复注册的,上面代码,他们的 key 都是 script1,但不会冲突,因为方法名称都不相同。
下面代码都是 RegisterStartupScript,第二句就不会有任何输出,因为之前已经注册过一个 script1 的脚本了。
虽然,Response.Write 可以输出 JavaScript,但输出的内容是在 <html> 之前,这会导致一些问题,比如样式表失效,甚至会导致一些脆弱的浏览器发生错误。
ClientScript 则可以方便地管理 JavaScript,应该说 ClientScript.RegisterClientScriptBlock 与 ClientScript.RegisterStartupScript 只有一点区别,那就是 RegisterClientScriptBlock 将脚本代码写在 <form> 之后,而 RegisterStartupScript 将代码写在 </form>(注意是结束标签)之前。
可以看出二者语法相同。
这两个方法,均可传入参数,参数表示 JavaScript 代码,然后向客户端输入这个 JavaScript 代码。
那么 alert("第一行\r\n第二行"); 这段 JavaScript 代码为什么会出错呢?
原来,这里的 JavaScript 代码进入之后,会把 \r\n 解释为换行,比如 var i = 0;\r\nvar j = 0; 这段代码输出到客户端后会变成两行。
所以要在 alert 中换行,应该这样:
加上转义字符。
RegisterClientScriptBlock 的原型与 RegisterStartupScript 相同,两个函数不同在于将其包含的脚本代码写入到 HTML 文件的不同位置。RegisterClientScriptBlock 在 Page 对象的元素的开始标记后立即发出客户端脚本,RegisterStartupScript 则是在 Page 对象的元素的结束标记之前发出该脚本。如果你的脚本有与页面对象(Doucument 对象)进行交互的语句,则推荐使用 RegisterStartupScript,反之如果要想客户端脚本尽可能早的执行,则可以使用 RegisterClientScriptBlock 或 Response.Write(不推荐用 Response.Write 输出脚本,它破坏了网页的结构。千一网络编辑注)。
RegisterClientScriptBlock 一般返回的是客户端函数的包装,而 RegisterStartupScript 返回得函数在 Document 装载完成后会执行,类似于我们平时所说的 <body οnlοad="f()"> 里面的函数;这两个方法在客户端呈现的代码位置不同,RegisterClientScriptBlock 在 <form runat=server> 之后,而 RegisterStartupScript 在 </form> 之前。
注:这里还有一点注意的是,就是前台的页面,大家注意一点,千万不要前台页面,全清空,或是在使用这两个方法之前,使用response.end()这种方法,否则会报xml格式错误,
在文件的1行1列上
转载地址:http://vkiei.baihongyu.com/