ClientScriptManager.RegisterStartupScript.
当我们要注册一个在页面启动的脚本时,我们会用ClientScriptManager.RegisterStartupScript 。
比如
<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public void Page_Load(Object sender, EventArgs e)
{
// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
String csname2 = "ButtonClickScript";
Type cstype = this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
String cstext1 = "alert('Hello World');window.locatoin.href='http://www.microsoft.com'";
cs.RegisterStartupScript(cstype, csname1, cstext1,true);
}
// Check to see if the client script is already registered.
if (!cs.IsClientScriptBlockRegistered(cstype, csname2))
{
StringBuilder cstext2 = new StringBuilder();
cstext2.Append("<script type=\"text/javascript\"> function DoClick() {");
cstext2.Append("Form1.Message.value='Text from client script.'} </");
cstext2.Append("script>");
cs.RegisterClientScriptBlock(cstype, csname2, cstext2.ToString(),false);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ClientScriptManager Example</title>
</head>
<body>
<form id="Form1"
runat="server">
<input type="text" id="Message" /> <input type="button" value="ClickMe" οnclick="DoClick()" />
</form>
</body>
</html>
但有时,我们希望,弹出脚本信息后,不显示页面内容。如果使用Response.Write,则可轻易做到。
如
Response.Write("<script>alert('hi');window.locaton.href='http://www.microsoft.com'</script>");
Response.End()
HTML执行过程:
浏览器发送请求->服务器接收->服务器处理->服务器返回请求->浏览器 开始接收返回数据
->浏览器一边接收一边把HTML转换成可以看见的文字啊,图片啊按钮啊什么的->接收完成->浏览器渲染HTML完成
->浏览器开始解释并执行页面上的Script脚本->触发window.onload,body.onload等事件。
可见,用ClientScriptManager.RegisterStartupScript 方式,会返回整个页面的较大的Source,在浏览器接收服务器返回的HTML完成之前,不会执行Script,但却会Render页面,所以我们看到了页面。
而
Response.Write("<script>alert('hi');window.locaton.href='http://www.microsoft.com'</script>");
Response.End()
这种方式,关键就是Response.End(), 这句话告诉服务器,你剩下的网页不要发了,就那一句就够了,结果浏览器没收到后虽然做了Render,却因为没有相关的显示标签,所以貌似是空白页面,然 后就执行了Script,跳转了。再者这个过程中,返回的长度也非常短,所以Render的速度也快,就更看不出来了。
Page.Response.Write("<script>var response;</script>");
Page.RegisterStartupScript("RegisterStartupScript","<script>var RegisterStartupScript;</script>");
Page.RegisterClientScriptBlock("RegisterClientScriptBlock","<script>var RegisterClientScriptBlock;</script>");
Response.Write输出后的位置在源文件的第一行.
RegisterClientScriptBlock输出后的位置会在<form>的下一行.(在asp.net自带的脚本和一些隐藏域之下).
RegisterStartupScript 输出后的位置会在</form>的上一行.
RegisterClientScriptBlock 的原型与RegisterStartupScript相同,两个函数不同在于将其包含的脚本代码写入到HTML文件的不同位 置.RegisterClientScriptBlock在 Page 对象的 元素的开始标记后立即发出客户端脚本,RegisterStartupScript则是在Page 对象的 元素的结束标记之前发出该脚本。如果你的脚本有与页面对象(doucument对象)进行交互的语句,则推荐使用 RegisterStartupScript,反之如果要想客户端脚本尽可能早的执行,则可以使用RegisterClientScriptBlock或 Response.Write。
RegisterClientScriptBlock 一般返回的是客户端函数的包装,而RegisterStartupScript返回得函数在document装载完成后会执行,类似于我们平时所说的 body οnlοad="f()"里面的函数;这两个方法在客户端呈现的代码位置不同,RegisterClientScriptBlock在<form runat=server>之后,而RegisterStartupScript在</form>之前。
补充例子:
....
</HEAD>
<body MS_POSITIONING="GridLayout">
<form name="Form1" method="post" action="WebForm6.aspx" id="Form1">
<input type="hidden" name="__VIEWSTATE" value="dDw3MzU1MTQ5MzY7Oz6nugrEg+5T6RC7MTIuLoIrMLQLPw==" />
<script>function block(){}</script> ------------>RegisterClientScriptBlock()方法输出的在这里
<input name="TextBox1" type="text" id="TextBox1" style="Z-INDEX: 101; LEFT: 296px; POSITION: absolute; TOP: 120px" />
<script>function startup(){}</script> ------------>RegisterStartupScript()方法输出的在这里
</form>
</body>
</HTML>
Page.Register......为1.1下的写法,使用时提示"已过时"
Page.ClientScript.Register......为2.0下的用法
详见讨论:http://social.microsoft.com/Forums/es-ES/295/thread/169d3484-60f1-455a-932c-6be57ed96b3d
public virtual void RegisterStartupScript(
string key,
string script
);
参数
// 服务器端弹出alert对话框
// </summary>
// <param name="str_message">提示信息,例子:"不能为空!"</param>
// <param name="page">page类</param>
public void alert(string str_message,page page)
{
page.registerstartupscript("","<script>alert('"+str_message+"');</script>");
}
// 服务器端弹出alert对话框,并使控件获得焦点
// </summary>
// <param name="str_ctl_name">获得焦点控件id值,比如:txt_name</param>
// <param name="str_message">提示信息,例子:"请输入您姓名!"</param>
// <param name="page">page类</param>
public void alert(string str_ctl_name,string str_message,page page)
{
page.registerstartupscript("","<script>alert('"+str_message+"');document.forms(0)."+str_ctl_name+".focus(); document.forms(0)."+str_ctl_name+".select();</script>");
}
// 服务器端弹出confirm对话框
// </summary>
// <param name="str_message">提示信息,例子:"您是否确认删除!"</param>
// <param name="btn">隐藏botton按钮id值,比如:btn_flow</param>
// <param name="page">page类</param>
public void confirm(string str_message,string btn,page page)
{
page.registerstartupscript("","<script> if (confirm('"+str_message+"')==true){document.forms(0)."+btn+".click();}</script>");
}
// 服务器端弹出confirm对话框,询问用户准备转向那些操作,包括“确定”和“取消”时的操作
// </summary>
// <param name="str_message">提示信息,比如:"成功增加数据,单击\"确定\"按钮填写流程,单击\"取消\"修改数据"</param>
// <param name="btn_redirect_flow">"确定"按钮id值</param>
// <param name="btn_redirect_self">"取消"按钮id值</param>
// <param name="page">page类</param>
public void confirm(string str_message,string btn_redirect_flow,string btn_redirect_self,page page)
{
page.registerstartupscript("","<script> if (confirm('"+str_message+"')==true){document.forms(0)."+btn_redirect_flow+".click();}else{document.forms(0)."+btn_redirect_self+".click();}</script>");
}
获得焦点
// 使控件获得焦点
// </summary>
// <param name="str_ctl_name">获得焦点控件id值,比如:txt_name</param>
// <param name="page">page类</param>
public void getfocus(string str_ctl_name,page page)
{
page.registerstartupscript("","<script>document.forms(0)."+str_ctl_name+".focus(); document.forms(0)."+str_ctl_name+".select();</script>");
}
//<summary>
//名称:redirect
//功能:子窗体返回主窗体
//参数:url
//返回值:空
//</summary>
public void redirect(string url,page page)
{
if ( session["ifdefault"]!=(object)"default")
{
page.registerstartupscript("","<script>window.top.document.location.href='/webjx/"+url+"';</script>");
}
}
转载于:https://www.cnblogs.com/vmyspace/archive/2012/03/01/2375075.html
ClientScriptManager.RegisterStartupScript.相关推荐
- ASP.NET处理架构
Web服务器的消息流动阶段 当装载(hosting) ASP.NET 的 Web 服务器接收到 HTTP 请求时,HTTP 聆听程序 (HTTP Listener) 会将请求转交给 URL 指定的网站 ...
- ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件!
在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...
- ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件
在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...
- Page.ClientScript、ClientScript、ScriptManager、ClientScriptManager等的详细解说
在 .aspx.cs页面中,输入这四个东西:Page.ClientScript.ClientScript.ScriptManager.ClientScriptManager,均会出提示,表示它们均可用 ...
- (转)ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 方法...
ScriptManager.RegisterStartupScript方法 如果页面中不用Ajax,cs中运行某段js代码方式可以是: Page.ClientScript.RegisterStartu ...
- ScriptManager和ClientScriptManager
1.先说一下ScriptManager控件吧,用过Ajax的都知道他是什么了就不用我多说了吧呵呵!!! ClientScriptManager csm = this.ClientScript; csm ...
- ASP.NET之ScriptManager和ClientScriptManager
ClientScriptManager方法 (1)RegisterClientScriptBlock方法 向页的顶部添加一个脚本块.以字符串形式创建脚本,然后将其传递给方法,方法再将脚本添加到页中.可 ...
- 用Response.Write和Page.RegisterStartupScript显示的提示框有什么区别
RegisterStartupScript是在表單尾部加有script代碼,即</form>前 RegisterClientScriptBlock是在表單開始處加script代碼,即 ...
- RegisterStartupScript 和 RegisterClientScriptBlock 的区别
RegisterClientScriptBlock的原型与RegisterStartupScript相同,两个函数不同在于将其 包含的脚本代码写入到HTML文件的不同位置.RegisterClient ...
最新文章
- Kubernetes 整体架构图
- 10.7 netstat:查看网络状态
- C++ Primer 5th笔记(chap 16 模板和泛型编程)转发
- [转]C# winForm 自定义鼠标样式的两种方法
- 14招保你ERP选型成功
- 【转载】最大权闭合子图 【网络流】
- 车牌识别与计算机编程,基于MATLAB的车牌识别程序详解.ppt
- python中的私有化
- Sklearn——用Sklearn实现K近邻分类(KNN)
- 使用localStorage存储表单数据
- MAC苹果应用软件,财务管理,三D制图,清理神器
- Tp-link路由器怎么设置端口映射 内网端口映射
- 支持全球科研抗疫,艾柏森成功研发Omicron变异株重组蛋白
- Rollup 插件开发牛刀小试
- 基于Tensorflow框架的BP神经网络回归小案例--预测跳高
- Vue实现图形化积木式编程(十)
- 分布式快速批量获取网站标题关键字描述(TDK)接口api文档说明
- Tableau——超市销售额数据分析可视化
- leelen可视对讲怎么接线_楼宇可视对讲系统工程施工
- 使用WMI来得到系统的服务