`

ASP.NET AJAX 使用ScriptManager控件

阅读更多

ASP.NET AJAX入门系列 使用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:

<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);

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属性都很简单。

分享到:
评论

相关推荐

    ASP.NET AJAX核心控件示例

    主要介绍了ASP.NET AJAX的几个核心控件的作用和具体用法示例。 包括:Scriptmanager,Updatepanal,Updateprogress,Timer

    ASP.NET AJAX重要的基本五控件

    ASP.NET AJAX(ScriptManager,ScriptManagerProxy,UpdatePanel,UpdateProgress,Timer),文档及单个AJAX控件的使用方法示例等

    ASP[1].NET_AJAX入门系列:使用ScriptManager控件

    ASP[1].NET_AJAX入门系列:使用ScriptManager控件.doc

    ASP.NET AJAX

    ajax技术,无刷新技术 导读:ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持...

    完全手册:ASP.net Ajax电子教程(9-15章)

    第一篇 ASP.NET AJAX概述 第1章 初识ASP.NET AJAX  1.1 ASP.NET AJAX概述  1.1.1 ASP.NET和ASP.AJAX  1.1.2 ASP.AJAX服务器端架构  1.1.3 ASP.AJAX客户端架构  1.2 搭建ASP.NET AJAX开发环境  1.3 第一个ASP...

    ASP.NET AJAX实战源码

    4.1 ASP.NET开发人员的Ajax 86 4.2 改进原有ASP.NET网站 87 4.2.1 一个示例ASP.NET网站 88 4.2.2 配置现有的ASP.NET网站 88 4.3 ScriptManager: Ajax页面的大脑 90 4.3.1 理解ScriptManager 90 4.3.2 部署...

    完全手册:ASP.net Ajax电子教程(1-8章)

    第一篇 ASP.NET AJAX概述 第1章 初识ASP.NET AJAX  1.1 ASP.NET AJAX概述  1.1.1 ASP.NET和ASP.AJAX  1.1.2 ASP.AJAX服务器端架构  1.1.3 ASP.AJAX客户端架构  1.2 搭建ASP.NET AJAX开发环境  1.3 第一个ASP...

    ASP.NET_AJAX入门系列

    ASP.NET_AJAX入门系列:使用ScriptManager控件.doc ASP.NET_AJAX入门系列:使用UpdatePanel控件.doc ASP.NET_AJAX入门系列:使用客户端脚本对UpdateProgress编程.doc ASP.NET_AJAX入门系列:在多个UpdatePanle中使用...

    完全手册ASP.NETAjax实用开发详解(14-15)

    第一篇 ASP.NET AJAX概述 第1章 初识ASP.NET AJAX  1.1 ASP.NET AJAX概述  1.1.1 ASP.NET和ASP.AJAX  1.1.2 ASP.AJAX服务器端架构  1.1.3 ASP.AJAX客户端架构  1.2 搭建ASP.NET AJAX开发环境  1.3 第一个ASP...

    ASP.NET AJAX 入门教程

    包括了核心AJAX类型系统,网络协议层(networking stack),组件模型,扩展器(extender)基类,以及与ASP.NET集成的服务器端功能(包括广受欢迎的ScriptManager,UpdatePanel,和 Timer控件)。

    [ASP.NET.AJAX编程参考手册(涵盖ASP.NET.3.5及2.0)].(美)霍斯拉维.扫描版.pdf

    本书以AJAX为核心阐述对象,介绍了它对JavaScript所做的各种扩展,还介绍了在ASP.NET环境下创建客户端应用所需的一些核心控件。通过大量的实例,本书详述了AJAX的内部机制,并且紧跟时代潮流,重点描述了如何依靠...

    ASP.NET Ajax框架教程

    应用场景代码示例(1)ScriptManager控件示例(2)UpdatePanel控件示例(3)UpdateProgress控件示例(4) Timer控件示例(5) Ajax中新Validators控件用法示例。。。。。。等,教程是基础是郑健老师的。。。内附有...

    完全手册ASP.NETAjax实用开发详解(1-6)

    第一篇 ASP.NET AJAX概述 第1章 初识ASP.NET AJAX  1.1 ASP.NET AJAX概述  1.1.1 ASP.NET和ASP.AJAX  1.1.2 ASP.AJAX服务器端架构  1.1.3 ASP.AJAX客户端架构  1.2 搭建ASP.NET AJAX开发环境  1.3 第一个ASP...

    完全手册ASP.NETAjax实用开发详解(12-13)

    第一篇 ASP.NET AJAX概述 第1章 初识ASP.NET AJAX  1.1 ASP.NET AJAX概述  1.1.1 ASP.NET和ASP.AJAX  1.1.2 ASP.AJAX服务器端架构  1.1.3 ASP.AJAX客户端架构  1.2 搭建ASP.NET AJAX开发环境  1.3 第一个ASP...

    完全手册ASP.NETAjax实用开发详解(7-8)

    第一篇 ASP.NET AJAX概述 第1章 初识ASP.NET AJAX  1.1 ASP.NET AJAX概述  1.1.1 ASP.NET和ASP.AJAX  1.1.2 ASP.AJAX服务器端架构  1.1.3 ASP.AJAX客户端架构  1.2 搭建ASP.NET AJAX开发环境  1.3 第一个ASP...

    Asp.net+Ajax框架教程 文档+源码

    1).ScriptManager控件示例... 1. 在异步调用服务端注册客户端脚本新方法... 2. 捕获Ajax异步调用中错误(默认使用alert提示). 3. 捕获Ajax异步调用中错误(自定义输出错误方式) 2).UpdatePanel控件示例... 4....

    ASP.NET-AJAX教程.rar

    ASP.NET AJAX教程 第一章:ajax概述 第七章:使用客户端脚本对UpdateProgress编 第二章:使用ScriptManager 第八章:自定义异常处理 第三章:使用ScriptManagerProxy控件 第九章:在母版页中使用UpdatePanel 第四...

    完全手册ASPNETAjax 实用开发详解(9-11)

    第一篇 ASP.NET AJAX概述 第1章 初识ASP.NET AJAX  1.1 ASP.NET AJAX概述  1.1.1 ASP.NET和ASP.AJAX  1.1.2 ASP.AJAX服务器端架构  1.1.3 ASP.AJAX客户端架构  1.2 搭建ASP.NET AJAX开发环境  1.3 第一个ASP...

    如何使用滑块控件可以在滑块的值变动时使滑块自动回传。

    最后 ,使用ASP.NET AJAX 的ScriptManager 控件加载所需的JavaScript 以使Control Toolkit 生效 : 复制代码 &lt;asp:ScriptManager ID="asm" runat="server" /&gt; 当滑块回传时 ,在服务器端可以捕获并响应这个事件 :...

    ASP.NET AJAX 1.0 RC开发10分钟图解

    开发环境:VS2005+ASP.NET AJAX 1.0 RC ...2.可以看到左侧工具箱多了一个AJAX Extensions,下面包括Timer,ScriptManager,ScriptManagerProxy,UpdateProgress,UpdatePanel等几个控件,右侧的代码视图,可以看到

Global site tag (gtag.js) - Google Analytics