Page.ClientScript、ClientScript、ScriptManager、ClientScriptManager等的详细解说
在 .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.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(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, 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等的详细解说的更多相关文章
- 网页弹出框ClientScript,ScriptManager
网页调用客户端弹出框 this.ClientScript.RegisterStartupScript(this.GetType(), "message", "<sc ...
- ClientScriptManager 和 ScriptManager RegisterClientScriptBlock
ClientScriptManager.RegisterOnSubmitStatement(Type, String, String) Method Registers an OnSubmit sta ...
- ASP.NET后台输出js大全,页面顶部、form表单中前面与后面、和UpdatePanel(ScriptManager、AJAX)输出JS
Response.Write 与 Page.ClientScript.RegisterStartupScript 与 Page.ClientScript.RegisterClientScriptB ...
- 向Page对象注册脚本
在madn上ClientScriptManager 类的示例: <%@ Page Language="C#"%> <!DOCTYPE html PUBLIC &q ...
- 弹出消息对话框ScriptManager
//直接调用WebMessageBox方法 #region 弹出消息对话框 /// <summary> /// 弹出消息对话框 /// </summary> /// <p ...
- ASP.NET CS文件中输出JavaScript脚本
ClientScript.RegisterStartupScript:http://msdn.microsoft.com/zh-cn/library/system.web.ui.clientscrip ...
- ASP.NET 3.5控件和组件开发技术之客户端回发/回调揭密
本文摘录自<纵向切入ASP.NET 3.5控件和组件开发技术>. 对于服务端控件元素,比如ASP.NET的Button标准服务端控件在提交时可以自动把请求发送到服务端处理,这样的控件我们不 ...
- mojoportal中使用jquey的插件
以前在mojo中使用jquery的插件,都是把插件的文件内容直接写到了相关的模块中,这样的问题是不整洁,一大串代码. 如果直接在layout.master中引入插件文件,或者在自定义模块中引入插件文件 ...
- ASP.NET 给作为隐藏域的TextBox赋值之后提交表单,无响应?
操作步骤: 给页面隐藏TextBox赋值,然后触发ASP.NET change事件,调用ASP.NET后台方法,调用后执行客户端脚本this.RegisterClientScriptBlock(Dat ...
随机推荐
- Luogu P4198 楼房重建 (李超线段树)
题目 传送门 题解 首先转化成到(0,0)(0,0)(0,0)的斜率. 那么就是求多少个点是前缀最大值. 做法是线段树,用gao(i,x)gao(i,x)gao(i,x)表示在iii区间内,之前最大值 ...
- POJ-2478-Farey Sequence(欧拉函数)
链接: https://vjudge.net/problem/POJ-2478 题意: The Farey Sequence Fn for any integer n with n >= 2 i ...
- AcWing P173 矩阵距离 题解
Analysis 就是一个裸的广搜,每次从是1的点开始找就好啦~~~ #include<iostream> #include<cstdio> #include<cstri ...
- Greenplum 查看表的分区键与分区类型
方法一 查看表的分区键 select d.nspname||'.'||a.relname as table_name,string_agg(b.attname,',') as column_namef ...
- 后台(一)vue+element-ui(全局配置)
vue init webpack 项目名称 npm install axios //先安装! npm install --save axios vue-ax ...
- 区间连续长度的线段树——洛谷P2894 [USACO08FEB]酒店Hotel
https://www.luogu.org/problem/P2894 #include<cstdio> #include<iostream> using namespace ...
- python3 数据类型测试
type(要测试的数据):
- TCP四次握手断开连接
建立连接非常重要,它是数据正确传输的前提:断开连接同样重要,它让计算机释放不再使用的资源.如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪 ...
- ros python 构造 pose
#!/usr/bin/env python import numpy as npfrom geometry_msgs.msg import Pose, Point, Quaternion, Twist ...
- Selenium+Python附件上传
在自动化测试过程中,我们会经常遇到附件上传,而附件上传主要分为两种:input型.非input型,我们本章就两种不同类型的上传方式讲解: (1)input型 <input id="tx ...