动态输出javascript脚本[ClientScriptManager类]

在上篇“ASP.NET页面的声明周期”中,我们查看该页面的源码可以看到如下情况:

页面显示的文字被显示在<html>和</html>之外,这不符合XHTML标准。这对于普通页面来说也许并无大碍,但是如果在频繁输出javascript脚本的网页中,可能会对网页的客户端执行效果产生影响。因为javascript脚本块在客户端调用方法之前还是客户端调用方法之后效果可能会不一样。
新建一个aspx文件,名为Home,在Page_Load事件中添加代码,如下:

ExpandedBlockStart.gif 输出javascript
protected   void  Page_Load( object  sender, EventArgs e)
    {
        
if  ( ! Page.IsPostBack)
        {
            Response.Write(
" <script lauguage='javasrcipt'>alert(' " + DateTime.Now.ToString() + " ')</script> " );
        }
    }

 

这样每次运行Home.aspx页面的时候都会弹出一个显示当前时间的对话框。但当查看其源代码时会发现:

ExpandedBlockStart.gif 查看源码
< script  lauguage ='javasrcipt' > alert( ' 2010/8/13 23:16:23 ' ) </ script >
 
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
 
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head >
      
< title ></ title >
</ head >
< body >
    
< form  method ="post"  action ="Home.aspx"  id ="form1" >
< div  class ="aspNetHidden" >
< input  type ="hidden"  name ="__VIEWSTATE"  id ="__VIEWSTATE"  value ="/wEPDwULLTE2MTY2ODcyMjlkZPJPFVG/mvEj7wJdj697BaFPCzi8KIMu+OvQgQLstVMC"   />
</ div >
    
< div >
    
    
</ div >
    
</ form >
</ body >
</ html >

 

可以看见输出的javascript代码在<html></html>标记之外。

解决办法:

在Page类中有一个ClientScript属性,它是ClientScriptManager的实例,这个类是在asp.net2.0中新增的。

ClientScriptManager有如下几个常用方法:

RegisterClientScriptBlock方法:向 Page 对象注册客户端脚本。
RegisterStartupScript方法:向 Page 对象注册启动脚本。
ClientScriptManager类通过键string和Type来唯一标识脚本。具有相同类型的键和Type的脚本识为同一脚本。

下面对Home窗体的Page_Load事件修改代码如下:

ExpandedBlockStart.gif ClientScript两个方法
protected   void  Page_Load( object  sender, EventArgs e)
    {
        
if  ( ! ClientScript.IsClientScriptBlockRegistered( this .GetType(),  " ClientScriptBlock " ))
        {
            ClientScript.RegisterClientScriptBlock(
this .GetType(),  " ClientScriptBlock " " <script lauguage='javascript'>alert('ClientScriptBlock')</script> " );
        }
        
if ( ! ClientScript.IsStartupScriptRegistered( this .GetType(), " StartupScript " ))
        {
            ClientScript.RegisterStartupScript(
this .GetType(), " StartupScript " , " <script lauguage='javascript'>alert('StartupScript')</script> " );
        }
    }

 

执行该页面时,会弹出两个提示窗口,生成的HTML代码如下:

ExpandedBlockStart.gif ClientScript生成HTML
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
 
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head >
      
< title ></ title >
</ head >
< body >
    
< form  method ="post"  action ="Home.aspx"  id ="form1" >
< div  class ="aspNetHidden" >
< input  type ="hidden"  name ="__VIEWSTATE"  id ="__VIEWSTATE"  value ="/wEPDwULLTE2MTY2ODcyMjlkZPJPFVG/mvEj7wJdj697BaFPCzi8KIMu+OvQgQLstVMC"   />
</ div >
 
< script  lauguage ='javascript' > alert( ' ClientScriptBlock ' ) </ script >
    
< div >
    
    
</ div >
    
< script  lauguage ='javascript' > alert( ' StartupScript ' ) </ script ></ form >
</ body >
</ html >

 

可以看出上面的两个方法输出的javascript脚本都在<form></form>标记之内,不会破环文章的结构,而且RegisterClientScriptBlock方法输出的javascript脚本代码块靠近<form>标记的开始标记,而RegisterStartupScript方法输出的javascript脚本代码块靠近<form>标记的结束标记,了解这一点对于控制动态添加的客户端脚本的时间是非常有利的。

转载于:https://www.cnblogs.com/aito/archive/2010/08/13/1799367.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值