ClientScriptManager.RegisterStartupScript.

ClientScriptManager.RegisterStartupScript.当我们要注册一个在页面启动的脚本时,我们会用ClientScriptManager.RegisterStartupScript。比如<%@PageLanguage=”C#”%><!DOCTYPEhtmlPUBLIC”-//W3C//DTDXHTML1.0Transitional//EN””http://www.w3.org/TR/xhtml1/D…

大家好,又见面了,我是你们的朋友全栈君。

当我们要注册一个在页面启动的脚本时,我们会用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

 

msdn如下说:允许 asp.net 服务器控件在 page 中发出客户端脚本块。
    [C#]

    public virtual void RegisterStartupScript(

     string key,

      string script

    );

参数
    key
        标识脚本块的唯一键。
    script
        要发送到客户端的脚本的内容。
以下是一些应用实例:
打开一个新窗口:
    page.registerstartupscript(“starup”, “<script language= ‘javascript’>window.open(‘” + url + “‘,”,’toolbar=no,resizable=yes,scrollbars=yes’)</script>”)
警告窗口
// <summary>

// 服务器端弹出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>”);

}
重载此警告窗口,使某控件获得焦点
// <summary>

// 服务器端弹出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>”);

}
确认对话框
// <summary>

// 服务器端弹出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>”);

}
重载确认对话框,点击确定触发一个隐藏按钮事件,点击取消触发一个隐藏按钮事件
// <summary>

// 服务器端弹出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>

// 使控件获得焦点

// </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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162310.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【Unity3D 灵巧小知识点】 ☀️ | Unity中如何使用代码切换场景

    【Unity3D 灵巧小知识点】 ☀️ | Unity中如何使用代码切换场景Unity小科普老规矩,先介绍一下Unity的科普小知识:Unity是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。也可以简单把Unity理解为一个游戏引擎,可以用来专业制作游戏!Unity小知识点学习Unity中如何使用代码切.

  • linux启动nginx命令行_Linux环境下启动、停止、重启nginx[通俗易懂]

    linux启动nginx命令行_Linux环境下启动、停止、重启nginx[通俗易懂]启动启动代码格式:nginx安装目录地址-cnginx配置文件地址例如:[root@LinuxServersbin]#/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf停止nginx的停止有三种方式:从容停止1、查看进程号[root@LinuxServer~]#ps-ef|grepnginx2、杀死进程[r…

  • c语言 银行家算法(完整代码实现)

    c语言 银行家算法(完整代码实现)银行家算法例子:T0时刻进程P1提出需要(1、0、2)个资源的请求T0时刻进程P4提出需要(3、3、0)个资源的请求T0时刻进程P0提出需要(0、2、0)个资源的请求全局变量:intMax[5][3]={7,5,3,3,2,2,9,0,2,2,2,2,4,3,3};//五个进程对各种资源的最大需求intAllocation[5][3]={0,1,0,2,0,0,3,0,2,2,1,1,0,0,2};//五个进程已分配的各种资源数目intNeed[5][3]={7,4,3

  • 利用IAR Timeline工具测试delay函数执行时间

    利用IAR Timeline工具测试delay函数执行时间”要把大象放冰箱,总共分几步”,呵呵,写到本篇博客的时候突然想起小品宋丹丹说的那句经典台词了(俺们东北人儿对本山大叔的作品真是滚瓜烂熟了,搞的舍友还时不时跟我学上一学),哈哈,所以就索性给题目也加上了“几步”的说法,把复杂的事情简单化,也起到吸引人眼球的作用(当然本篇也是有实料的,进来的不会让你失望的,呵呵)。咳咳,至于到底是几步,是不是传说中的“三步”来,哈哈,那还得下面分解。。。  

  • Landsat 8 波段组合「建议收藏」

    Landsat 8 波段组合「建议收藏」Landsat8hasbeenonlineforacoupleofmonthsnow,andtheimageslookincredible.WhileallofthebandsfrompreviousLandsatmissionsarestillincorporated,thereareacoupleofnewones,su…

  • vimrc配置_vim环境配置

    vimrc配置_vim环境配置博文背景写代码没vim难受,装个vim它对于快捷键的设置并不能和visualstudio一样很方便地设置将所有快捷键映射到vim插件,所以记录配置后的文件非常有必要。具体操作切换vim插件状态的快捷键设置:文件路径:C:\Users\Administrator\AppData\Roaming\JetBrains\WebStormXXX\options\vim_settings.xml文件内容:<application><componentname=”VimEdito

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号