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 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>
二.一个简单的示例
这个例子其实是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:
<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.Inherit:应该是通过程序设置ScriptMode的时候,等同于Auto?(不太了解)
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);![]() &nbs |








}