注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 IB客座主编(四)美国西蒙公..
 帮助

ASP.NET AJAX入门系列(2):使用ScriptManager控件


2006-10-25 23:16:00
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://terrylee.blog.51cto.com/342737/67708
ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAXASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,以及调用AuthenticationServiceProfileService,还有页面错误处理等。
 
主要内容
1.控件概述
2.一个简单的示例
3.客户端脚本模式
4.错误处理
5Services属性
6Scripts属性
 
一.控件概述
ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAXASP.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发送到客户端的脚本的模式,有四种模式:AutoInheritDebugRelease,默认值为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发送到客户端的脚本的模式,它有四种模式:AutoInheritDebugRelease,默认值为Auto
1Auto:它会根据Web站点的Web.config配置文件来决定使用哪一种模式,只有当配置文件中retail属性设置为false:
<system.web>

  
<deployment retail="false" />

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

AutoEventWireup
="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
2Inherit:应该是通过程序设置ScriptMode的时候,等同于Auto?(不太了解)
3Debug:客户端脚本使用Debug版本,除非retail属性设为true
4Release:客户端脚本使用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);

           &nbs