微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ScriptManager控件

ScriptManager 控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,以及调用AuthenticationService和ProfileService,还有页面错误处理等。
 
主要内容
1 .控件概述
2 一个简单的示例
3 .客户端脚本模式
4 错误处理
5 .Services属性
6 .Scripts属性
 
一.控件概述
ScriptManager 控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,还可以指定页面错误处理等。
使用<asp:ScriptManager/>来定义一个ScriptManager,简单的ScriptManager定义形式:
 

< asp:ScriptManager  ID ="ScriptManager1"  


                   runat
="server" >


      
< AuthenticationService  Path =""  />


      
< ProfileService  LoadProperties =""  Path =""  />


      
< Scripts >


        
<asp:ScriptReference/>


      
</ Scripts >


      
< Services >


        
< asp:ServiceReference  />


      
</ Services >


</ asp:ScriptManager >
ScriptManager
属性方法如下:
 
描述
AllowCustomError
和Web.config中的自定义错误配置区<customErrors>相联系,是否使用它,认值为true
AsyncPostBackerrorMessage
异步回传发生错误时的自定义提示错误信息,
AsyncPostBackTimeout
异步回传时超时限制,认值为90,单位为秒
EnablePartialRendering
是否支持页面的局部更新,认值为True,一般不需要修改
ScriptMode
指定ScriptManager发送到客户端的脚本的模式,有四种模式:Auto,Inherit,Debug,Release,认值为Auto,后面会仔细说到。
ScriptPath
设置所有的脚本块的根目录,作为全局属性包括自定义的脚本块或者引用第三方的脚本块。如果在Scripts中的<asp:ScriptReference/>标签中设置了Path属性,它将覆盖该属性
OnAsyncPostBackerror
异步回传发生异常时的服务端处理函数在这里可以捕获一场信息并作相应的处理。
OnResolveScriptReference
指定ResolveScriptReference事件的服务器端处理函数,在该函数中可以修改某一条脚本的相关信息如路径、版本等。
 
二.一个简单的示例
这个例子其实是UpdatePanel示例,在页面中加入了日期控件和一个下拉框,根据下拉框选择的不同,日期控件背景变为不同的颜色。示例代码如下:

<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"  %>


 


< script  runat ="server" >


    
void DropDownSelection_Change(Object sender, EventArgs e)


    
{


        Calendar1.DayStyle.BackColor 
=


            System.Drawing.Color.FromName(ColorList.SelectedItem.Value);


    }


</ script >


 


< html  xmlns ="http://www.w3.org/1999/xhtml" >


< head  id ="Head1"  runat ="server" >


    
< title > ScriptManager Example </ title >


</ head >


< body >


    
< form  id ="form1"  runat ="server" >


        
< div >


            
< asp:ScriptManager  ID ="ScriptManager1"  


                               runat
="server" >


            
</ asp:ScriptManager >


            
< asp:UpdatePanel  ID ="UpdatePanel1"


                             runat
="server" >


                
< ContentTemplate >


                    
< asp:Calendar  ID ="Calendar1"  


                                  ShowTitle
="True"


                                  runat
="server"  />


                    
< div >


                        Background:


                        
< br  />


                        
< asp:DropDownList  ID ="ColorList"  


                                          AutopostBack
="True"  


                                          OnSelectedindexChanged
="DropDownSelection_Change"


                                          runat
="server" >


                            
< asp:ListItem  Selected ="True"  Value ="White" >  


                            White 
</ asp:ListItem >


                            
< asp:ListItem  Value ="Silver" >  


                            Silver 
</ asp:ListItem >


                            
< asp:ListItem  Value ="DarkGray" >  


                            Dark Gray 
</ asp:ListItem >


                            
< asp:ListItem  Value ="Khaki" >  


                            Khaki 
</ asp:ListItem >


                            
< asp:ListItem  Value ="DarkKhaki" >  D


                            ark Khaki 
</ asp:ListItem >


                        
</ asp:DropDownList >


                    
</ div >


                
</ ContentTemplate >


            
</ asp:UpdatePanel >


            
< br  />


        
</ div >


    
</ form >


</ body >


</ html >
 
三.客户端脚本模式
在前面我们提到了ScriptMode属性指定ScriptManager发送到客户端的脚本的模式,它有四种模式:Auto,Inherit,Debug,Release,认值为Auto。
1 .Auto:它会根据Web站点的Web.config配置文件来决定使用哪一种模式,只有当配置文件中retail属性设置为false: .Inherit:应该是通过程序设置ScriptMode的时候,等同于Auto?(不太了解)

< system .web >


  
< deployment  retail ="false"  />


</ system.web >
或者页面中的Debug指令设为true的时候会使用Debug版本,其他的情况都会使用Release版本。

< %@ Page  Language ="C#"  Debug ="true"


AutoEventWireup
="true"  CodeFile ="Default.aspx.cs"  Inherits ="_Default"  % >
2
3 .Debug:客户端脚本使用Debug版本,除非retail属性设为true。
4 .Release:客户端脚本使用Release版本,除非retail属性设为false。
 
四.错误处理
页面回传时如果发生了异常AsyncPostBackerror事件将被触发,错误信息的处理依赖于AllowCustomErrors属性、AsyncPostBackerrorMessage属性和Web.config中的<customErrors>配置区。下面看一个简单的错误处理例子,在AsyncPostBackerror事件中捕获到异常信息并设置AsyncPostBackerrorMessage属性

<% @ Page Language="C#"  %>


< script  runat ="server" >


    protected 
void ErrorProcessClick_Handler(object sender, EventArgs e)


    
{

        
// This handler demonstrates an error condition. In this example


        
// the server error gets intercepted on the client and an alert is shown. 


        
throw new ArgumentException();

    }


    protected 
void SuccessprocessClick_Handler(object sender, EventArgs e)


    
{

        
// This handler demonstrates no server side exception.


        UpdatePanelMessage.Text 
= "The asynchronous postback completed successfully.";


    }


    protected 
void ScriptManager1_AsyncPostBackerror(object sender, AsyncPostBackerrorEventArgs e)


    
{

        ScriptManager1.AsyncPostBackerrorMessage 
= "异常信息为:" + e.Exception.Message;


    }


</ script >



< html  xmlns ="http://www.w3.org/1999/xhtml" >


< head  id ="Head1"  runat ="server" >


    
< title > PageRequestManager endRequestEventArgs Example </ title >


    
< style  type ="text/css" >


    body 
{


        font-family
: Tahoma;


    
}


    #AlertDiv
{


    left
: 40%; top: 40%;


    position
: absolute; width: 200px;


    padding
: 12px; 


    border
: #000000 1px solid;


    background-color
: white; 


    text-align
: left;


    visibility
: hidden;


    z-index
: 99;


    
}


    #AlertButtons
{


    position
: absolute;


    right
: 5%;


    bottom
: 5%;


    
}


    
</ style >


</ head >


< body  id ="bodytag" >


    
< form  id ="form1"  runat ="server" >


        
< div >


            
< asp:ScriptManager  ID ="ScriptManager1"  runat ="server"  

            OnAsyncPostBackerror
="ScriptManager1_AsyncPostBackerror" >


            
</ asp:ScriptManager >

 

            
< script  type ="text/javascript"  language ="javascript" >


                
var divelem = 'AlertDiv';


                
var messageElem = 'AlertMessage';


                
var errorMessageAdditional = 'Please try again.';


                
var bodyTag = 'bodytag';

                Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);


                
function ToggleAlertDiv(visstring)

                
{

                     
if (visstring == 'hidden')


                     
{

                         $get(bodyTag).style.backgroundColor 
= 'white';                         

                     }

                     
else

                     
{

                         $get(bodyTag).style.backgroundColor 
= 'gray';                         


                     }


                     
var adiv = $get(divelem);


                     adiv.style.visibility 
= visstring;


                }


                
function ClearErrorState() {


                     $get(messageElem).innerHTML 
= '';


                     ToggleAlertDiv('hidden');                     


                }

                
function EndRequestHandler(sender, args)


                
{

                   
if (args.get_error() != undefined && args.get_error().httpStatusCode == '500')

                   
{


                       
var errorMessage = args.get_error().message


                       args.set_errorHandled(
true);


                       ToggleAlertDiv('visible');


                       $get(messageElem).innerHTML 
= '"' + 


                                errorMessage + '
" ' + errorMessageAdditional;


                   }


                }


            
</ script >


            
< asp:UpdatePanel  runat ="Server"  UpdateMode ="Conditional"  ID ="UpdatePanel1" >


                
< ContentTemplate >


                    
< asp:Panel  ID ="Panel1"  runat ="server"  GroupingText ="Update Panel" >


                        
< asp:Label  ID ="UpdatePanelMessage"  runat ="server"  />


                        
< br  />


                        Last update:


                        
<% =  DateTime.Now.ToString()  %>


                        .


                        
< br  />


                        
< asp:Button  runat ="server"  ID ="Button1"  Text ="Submit Successful Async Postback"


                            OnClick
="SuccessprocessClick_Handler"  OnClientClick ="ClearErrorState()"  />


                        
< asp:Button  runat ="server"  ID ="Button2"  Text ="Submit Async Postback With Error"


                            OnClick
="ErrorProcessClick_Handler"  OnClientClick ="ClearErrorState()"  />


                        
< br  />


                    
</ asp:Panel >


                
</ ContentTemplate >


            
</ asp:UpdatePanel >


            
< div  id ="AlertDiv" >


                
< div  id ="AlertMessage" >


                
</ div >


                
< br  />


                
< div  id ="AlertButtons"  >


                    
< input  id ="OKButton"  type ="button"  value ="OK"  


                           runat
="server"  onclick ="ClearErrorState()"  />


                
</ div >


           
</ div >


    
</ form >


</ body >


</ html >
运行后时界面:

发生异常信息

 
五.Services属性
Services 用来管理对WebService的调用,通过<asp:ServiceReference>标签可以在Services中注册一个WebService,在运行时ScriptManager将为每一个ServiceReference对象生成一个客户端代理,<asp:ServiceReference>标签一个很重要的属性是Path,用来指定WebService的路径,如下所示:

< asp:ScriptManager  ID ="SM1"  runat ="server" >


    
< Services >


        
< asp:ServiceReference  Path ="Service.asmx" />


    
</ Services >


</ asp:ScriptManager >
一个简单的调用WebService的例子:
WebService 如下,注意在WebServiceSample上加ScriptService特性: 页面

[ScriptService]


public  class  WebServiceSample : System.Web.Services.WebService  {


    
public WebServiceSample()


    
{


        
//Uncomment the following line if using designed components 


        
//InitializeComponent(); 


    }



    [WebMethod]


    
public string EchoString(String s)


    
{

        
return "Hello " + s;

    }


}
ASPX

<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3"  %>


< html  xmlns ="http://www.w3.org/1999/xhtml"  >


< head  runat ="server" >


    
< title > Untitled Page </ title >


</ head >


< script  type ="text/javascript"  language ="JavaScript" >


    
function OnbuttonGo_click() 


    
{

        requestSimpleService 
= WebServiceSample.EchoString(


            document.getElementById('inputName').value,       
//params


            OnRequestComplete    
//Complete event


            );


        
return false;

    }


    
function OnRequestComplete(result) 


    
{

        alert(result);

    }


</ script >


< body >


    
< form  id ="form1"  runat ="server" >


    
< asp:ScriptManager  ID ="ScriptManager1"  runat ="server" >


        
< Services >


            
< asp:ServiceReference  Path ="WebServiceSample.asmx" />


        
</ Services >


    
</ asp:ScriptManager >


    
< div >


        
< input  type ="text"  id ="inputName"  size =20 />


        
< input  id ="button"  type ="button"  value ="调 用"  onclick ="return OnbuttonGo_click()"  /></ div >


    
</ form >


</ body >


</ html >
运行后效果如下:

当然了也可以在运行时动态的在Services中加入ServiceReference,下面看一个运行时动态加入ServiceReference的例子:

<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3"  %>


< script  runat ="server" >


    
void Page_Load(object sender, EventArgs e)


    
{


        ServiceReference sr 
= new ServiceReference();


        sr.Path 
= "WebServiceSample.asmx";


        ScriptManager1.Services.Add(sr);


    }


</ script >


< html  xmlns ="http://www.w3.org/1999/xhtml"  >


< head  runat ="server" >


    
< title > Untitled Page </ title >


</ head >


< script  type ="text/javascript"  language ="JavaScript" >


    
function OnbuttonGo_click() 


    
{


        requestSimpleService 
= WebServiceSample.EchoString(


            document.getElementById('inputName').value,       
//params


            OnRequestComplete    
//Complete event


            );


        
return false;


    }


 


    
function OnRequestComplete(result) 


    
{


        alert(result);


    }


</ script >


 


< body >


    


    
< form  id ="form1"  runat ="server" >


    
< asp:ScriptManager  ID ="ScriptManager1"  runat ="server" >


    
</ asp:ScriptManager >


    
< div >


        
< input  type ="text"  id ="inputName"  size =20 />


        
< input  id ="button"  type ="button"  value ="调 用"  onclick ="return OnbuttonGo_click()"  /></ div >


    
</ form >


</ body >


</ html >
可以看到运行后和在ScriptManager中直接加入的效果是一样的。

 
六.Scripts属性
关于Scripts属性到后面具体再说吧,最主要的属性有Path指定脚本的路径,ScriptMode指定客户端脚本的模式,它会覆盖ScriptManager中的ScriptMode属性,还有一个属性是IgnoreScriptPath,指定是否忽略掉ScriptManager中的ScriptPath属性
关于ScriptManager控件就学习到这里了,至于AuthenticationService属性和ProfileService属性都很简单。
 作者: TerryLee
出处: http://terrylee.cnblogs.com
弹出窗口的方法
ScriptManager.RegisterStartupScript(this.UpdatePanel1,this.GetType(),"updateScript","alert('保存成功')",true);


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2141919
 

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

相关推荐