在 .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);

Page.ClientScript、ClientScript、ScriptManager、ClientScriptManager等的详细解说的更多相关文章

  1. 网页弹出框ClientScript,ScriptManager

    网页调用客户端弹出框 this.ClientScript.RegisterStartupScript(this.GetType(), "message", "<sc ...

  2. ClientScriptManager 和 ScriptManager RegisterClientScriptBlock

    ClientScriptManager.RegisterOnSubmitStatement(Type, String, String) Method Registers an OnSubmit sta ...

  3. ASP.NET后台输出js大全,页面顶部、form表单中前面与后面、和UpdatePanel(ScriptManager、AJAX)输出JS

    Response.Write 与   Page.ClientScript.RegisterStartupScript 与 Page.ClientScript.RegisterClientScriptB ...

  4. 向Page对象注册脚本

    在madn上ClientScriptManager 类的示例: <%@ Page Language="C#"%> <!DOCTYPE html PUBLIC &q ...

  5. 弹出消息对话框ScriptManager

    //直接调用WebMessageBox方法 #region 弹出消息对话框 /// <summary> /// 弹出消息对话框 /// </summary> /// <p ...

  6. ASP.NET CS文件中输出JavaScript脚本

    ClientScript.RegisterStartupScript:http://msdn.microsoft.com/zh-cn/library/system.web.ui.clientscrip ...

  7. ASP.NET 3.5控件和组件开发技术之客户端回发/回调揭密

    本文摘录自<纵向切入ASP.NET 3.5控件和组件开发技术>. 对于服务端控件元素,比如ASP.NET的Button标准服务端控件在提交时可以自动把请求发送到服务端处理,这样的控件我们不 ...

  8. mojoportal中使用jquey的插件

    以前在mojo中使用jquery的插件,都是把插件的文件内容直接写到了相关的模块中,这样的问题是不整洁,一大串代码. 如果直接在layout.master中引入插件文件,或者在自定义模块中引入插件文件 ...

  9. ASP.NET 给作为隐藏域的TextBox赋值之后提交表单,无响应?

    操作步骤: 给页面隐藏TextBox赋值,然后触发ASP.NET change事件,调用ASP.NET后台方法,调用后执行客户端脚本this.RegisterClientScriptBlock(Dat ...

随机推荐

  1. PL/SQL存储过程

    一.概述 过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储于数据库中. 并通过输入.输出和输入输出参数与其调用者交换信息.唯一区别是函数总向调用者返回数据. 二.存储过程详解 ...

  2. 基于JS的高级脚本语言 Sara

    Sara-基于JS的高级脚本语言 欢迎使用Sara,Sara是一款基于JavaScript的全新的高级脚本语言! Sara不像我们工作室上一款编程语言作品-Ginit一样,他属于更高级的语言 Sara ...

  3. jquery模仿淘宝星星打分

    今天做论坛页面有星星评分功能,以下是代码.用的时候引入jquery <span> <ul class="hs_df_xx"> <li><i ...

  4. 异常:ORA-01013: 用户请求取消当前的操作

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/bnmnba/article/detail ...

  5. jQuery相关方法1

    一.设置某个元素的标签内容------.html()方法 <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js& ...

  6. 心跳(纯代码制作心形,animation动画)

    思路:利用两个长方形(比例是2:3 | 3:2)可以合成心形,然后利用动画,缩放大小实现心跳(纯代码),效果如下: <body> <div></div> </ ...

  7. 爬虫(五):PyQuery的使用

    一:简介 PyQuery库是jQuery的Python实现,可以用于解析HTML网页内容,是一个非常强大又灵活的网页解析库. -->官方文档地址 -->jQuery参考文档 二:初始化 初 ...

  8. 配置Notepad++

    Notepad++配置 1.自动换行 视图 - 自动换行 2.隐藏工具栏 设置 - 首选项... > 常用 > 工具栏 - 隐藏 3.隐藏菜单栏 设置 - 首选项... > 常用 & ...

  9. 1、Kfaka 部署

    一.使用Kfaka自带的zookeeper服务. 1.下载Kafka,下载地址: http://kafka.apache.org/downloads 2.区分Kfaka版本: Scala 2.12 - ...

  10. 2018-2019-2 20165234 《网络对抗技术》 Exp9 Web安全基础

    Exp9 Web安全基础 一. 实践内容 1. 安装JDK.Webgoat 2. SQL注入攻击 数字型注入(Numeric SQL Injection) 日志欺骗(Log Spoofing) 字符串 ...