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属性
.Services属性
6
.Scripts属性
.Scripts属性
一.控件概述
ScriptManager
控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,还可以指定页面错误处理等。
控件包括在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>
<
system
.web
>
<
deployment
retail
=”false”
/>
</
system.web
>
<
%@ Page
Language
=”C#”
Debug
=”true”
AutoEventWireup
=”true”
CodeFile
=”Default.aspx.cs”
Inherits
=”_Default”
%
>
<%
@ 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
>
<
asp:ScriptManager
ID
=”SM1″
runat
=”server”
>
<
Services
>
<
asp:ServiceReference
Path
=”Service.asmx”
/>
</
Services
>
</
asp:ScriptManager
>
[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;
}
}
<%
@ 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
>
<%
@ 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
>
<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?(不太了解)
.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。
.Debug:客户端脚本使用Debug版本,除非retail属性设为true。
4
.Release:客户端脚本使用Release版本,除非retail属性设为false。
.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的路径,如下所示:
用来管理对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特性:
页面:
如下,注意在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用法_scriptmanager控件分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/72517.html