在 .aspx.cs页面中,输入这四个东西:Page.ClientScript、ClientScript、ScriptManager、ClientScriptManager,均会出提示,表示它们均可用,那么它们有什么区别呢?

Page.ClientScript 与 ClientScript 的关系

这二者实际上是一个东西,后者只是省略了 Page。都是获取用于管理脚本、注册脚本和向页添加脚本的ClientScriptManager 对象。

ScriptManager 与 ClientScriptManager 区别

他们的名称空间均是 System.Web.UI。

  • ScriptManager 是用于管理 AJAX 脚本库和脚本文件;
  • ClientScriptManager 用于管理普通的 script,就比如向客户端输出一个<script>alert("");</script>。

ClientScript 与 ClientScriptManager 区别

ClientScript 是 ClientScriptManager 的对象,ClientScriptManager是类。

Page.RegisterClientScriptBlock 与Page.RegisterStartupScript(也可省略 Page)

微软已经不推荐这样写,而应该是 ClientScript.RegisterClientScriptBlock 或

ClientScript.RegisterStartupScript。

RegisterClientScriptBlock、RegisterStartupScript 都是注册一个脚本块。

ClientScript.RegisterClientScriptBlock(this.GetType(), "script1","alert(1);", true);
ClientScript.RegisterStartupScript(this.GetType(), "script1","alert(2);", true);

它们的区别就是 RegisterClientScriptBlock 是注册在 body 最前面,而RegisterStartupScript 是注册在 body 最后面。

为什么这样呢?一些优化性能的文章说,script 要放在 body 最后加载,但根据一些应用的实际情况,必须得在最初加载script,这时就得用 RegisterClientScriptBlock 了。

说说他们的第二个参数 key。

第二个参数 key 是用来避免重复注册的,上面代码,他们的 key 都是script1,但不会冲突,因为方法名称都不相同。

下面代码都是 RegisterStartupScript,第二句就不会有任何输出,因为之前已经注册过一个 script1的脚本了。

ClientScript.RegisterStartupScript(this.GetType(), "script1","alert(2);", true);
ClientScript.RegisterStartupScript(this.GetType(), "script1","alert(3);", true);
ClientScript.RegisterStartupScript(this.GetType(), "script2","alert(4);", true);
 

虽然,Response.Write 可以输出 JavaScript,但输出的内容是在<html>之前,这会导致一些问题,比如样式表失效,甚至会导致一些脆弱的浏览器发生错误。

ClientScript 则可以方便地管理 JavaScript,应该说ClientScript.RegisterClientScriptBlock 与ClientScript.RegisterStartupScript 只有一点区别,那就是RegisterClientScriptBlock 将脚本代码写在<form> 之后,而 RegisterStartupScript将代码写在 </form>(注意是结束标签)之前。

public void RegisterClientScriptBlock(Type type,string key, string script)
public void RegisterClientScriptBlock(Type type, string key, stringscript, bool addScriptTags)
public void RegisterStartupScript(Type type, string key, stringscript)
public void RegisterStartupScript(Type type, string key, stringscript, bool addScriptTags)

可以看出二者语法相同。

  • type 要注册的启动脚本的类型。
  • key 要注册的启动脚本的键,也就是你自己给这段脚本起的名字。相同 key的脚本被当作是重复的,对于这样的脚本只输出最先注册的,ClientScriptBlock 和 StartupScript 中的 key相同不算是重复的。
  • script 脚本代码。
  • addScriptTags 是否添加<script> 标签,如果脚本代码中不含<script> 标签,则应该指定该值为 true,若不指定该值,会被当作false 对待。
ClientScript.RegisterClientScriptBlock(this.GetType(), "key1",@"function Go(){ alert('');}", true);
ClientScript.RegisterStartupScript(this.GetType(), "key1", "Go();",true);

最新文章

  1. Https方式使用Git@OSC设置密码的方式
  2. appium+Python真机运行测试demo的方法
  3. &lt;mate&gt;
  4. pip install 出现报asciii码错误的问题
  5. 历时3个月,金属流通行业管理系统(B/S)版成功上线
  6. 配置Junit测试程序
  7. VMware虚拟机的CentOS无法上网的解决方法
  8. Punycode与中文互转
  9. 基于ActiveMQ的点对点收发消息
  10. H5+Boostrap的音乐播放器
  11. 初识CC_MVPMatrix
  12. Linux(centos7)下安装Docker
  13. java中接口和抽象类的异同点
  14. 20155324 2016-2017-2 《Java程序设计》第5周学习总结
  15. C语言指针详解(经典,非常详细)
  16. oozie JAVA Client 编程提交作业
  17. poj2279 线性dp
  18. codeforces 894B - Ralph And His Magic Field - [数学题]
  19. html + php 框架
  20. java Arrays.asList用法

热门文章

  1. redis五中数据类型
  2. Substring Anagrams
  3. docker:设置国内镜像仓储
  4. Vue IE11 报错 Failed to generate render function:SyntaxError: 缺少标识符 in
  5. UEFI分区损坏重建指南
  6. 【安卓基础】ViewPager2的入门使用
  7. idea创建springmvc项目创部署成功,但访问controller层报错404
  8. AcWing P165 小猫爬山 题解
  9. [English] - 单词阶段1
  10. 8.1.T1