public ref class ScriptManager : System::Web::UI::Control, System::Web::UI::IPostBackDataHandler, System::Web::UI::IPostBackEventHandler
[System.Drawing.ToolboxBitmap(typeof(EmbeddedResourceFinder), "System.Web.Resources.ScriptManager.bmp")]
public class ScriptManager : System.Web.UI.Control, System.Web.UI.IPostBackDataHandler, System.Web.UI.IPostBackEventHandler
[<System.Drawing.ToolboxBitmap(typeof(EmbeddedResourceFinder), "System.Web.Resources.ScriptManager.bmp")>]
type ScriptManager = class
inherit Control
interface IPostBackDataHandler
interface IPostBackEventHandler
Public Class ScriptManager
Inherits Control
Implements IPostBackDataHandler, IPostBackEventHandler
ScriptManager
以下示例演示了使用
ScriptManager
控件的不同方案。
启用Partial-Page 汇报
以下示例演示如何使用
ScriptManager
控件启用分页更新。 在此示例中,
Calendar
和
DropDownList
控件位于 控件
UpdatePanel
内。 默认情况下,属性
Always
的
UpdateMode
值为 ,属性
true
的
ChildrenAsTriggers
值为 。 因此,面板的子控件会导致异步回发。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void DropDownSelection_Change(Object sender, EventArgs e)
Calendar1.DayStyle.BackColor =
System.Drawing.Color.FromName(ColorList.SelectedItem.Value);
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
SelectedDate.Text =
Calendar1.SelectedDate.ToString();
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>UpdatePanel Example</title>
</head>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1"
runat="server" />
<asp:UpdatePanel ID="UpdatePanel1"
runat="server">
<ContentTemplate>
<asp:Calendar ID="Calendar1"
ShowTitle="True"
OnSelectionChanged="Calendar1_SelectionChanged"
runat="server" />
Background:
<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>
Selected date:
<asp:Label ID="SelectedDate"
runat="server">None.</asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Sub DropDownSelection_Change(ByVal Sender As Object, ByVal E As EventArgs)
Calendar1.DayStyle.BackColor = _
System.Drawing.Color.FromName(ColorList.SelectedItem.Value)
End Sub
Protected Sub Calendar1_SelectionChanged(ByVal Sender As Object, ByVal E As EventArgs)
SelectedDate.Text = Calendar1.SelectedDate.ToString()
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>UpdatePanel Example</title>
</head>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1"
runat="server" />
<asp:UpdatePanel ID="UpdatePanel1"
runat="server">
<ContentTemplate>
<asp:Calendar ID="Calendar1"
ShowTitle="True"
OnSelectionChanged="Calendar1_SelectionChanged"
runat="server" />
Background:
<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>
Selected date:
<asp:Label ID="SelectedDate"
runat="server">None.</asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
处理Partial-Page更新错误和注册脚本
以下示例演示如何在分页更新期间提供自定义错误处理。 默认情况下,当部分页更新期间发生错误时,将显示 JavaScript 消息框。 此示例演示如何通过为 事件提供处理程序
AsyncPostBackError
并在事件处理程序中设置
AsyncPostBackErrorMessage
属性来使用自定义错误处理。 还可以设置
AllowCustomErrorsRedirect
属性以指定在部分页更新期间发生错误时如何使用 Web.config 文件的自定义错误部分。 在此示例中,使用 属性的
AllowCustomErrorsRedirect
默认值。 这意味着,如果 Web.config 文件包含
customErrors
元素,该元素将确定错误的显示方式。 有关详细信息,请参阅
customErrors 元素 (ASP.NET 设置架构)
。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
int a = Int32.Parse(TextBox1.Text);
int b = Int32.Parse(TextBox2.Text);
int res = a / b;
Label1.Text = res.ToString();
catch (Exception ex)
if (TextBox1.Text.Length > 0 && TextBox2.Text.Length > 0)
ex.Data["ExtraInfo"] = " You can't divide " +
TextBox1.Text + " by " + TextBox2.Text + ".";
throw ex;
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
if (e.Exception.Data["ExtraInfo"] != null)
ScriptManager1.AsyncPostBackErrorMessage =
e.Exception.Message +
e.Exception.Data["ExtraInfo"].ToString();
ScriptManager1.AsyncPostBackErrorMessage =
"An unspecified error occurred.";
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>UpdatePanel Error Handling Example</title>
<style type="text/css">
#UpdatePanel1 {
width: 200px; height: 50px;
border: solid 1px gray;
#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">
<asp:ScriptManager ID="ScriptManager1"
OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" runat="server" >
<Scripts>
<asp:ScriptReference Path="ErrorHandling.js" />
</Scripts>
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server" Width="39px"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" Width="39px"></asp:TextBox>
<asp:Label ID="Label1" runat="server"></asp:Label><br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="calculate" />
</ContentTemplate>
</asp:UpdatePanel>
<div id="AlertDiv">
<div id="AlertMessage">
<div id="AlertButtons">
<input id="OKButton" type="button" value="OK" runat="server" onclick="ClearErrorState()" />
</form>
</body>
</html>
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim a As Int32
a = Int32.Parse(TextBox1.Text)
Dim b As Int32
b = Int32.Parse(TextBox2.Text)
Dim res As Int32 = a / b
Label1.Text = res.ToString()
Catch ex As Exception
If (TextBox1.Text.Length > 0 AndAlso TextBox2.Text.Length > 0) Then
ex.Data("ExtraInfo") = " You can't divide " & _
TextBox1.Text & " by " & TextBox2.Text & "."
End If
Throw ex
End Try
End Sub
Protected Sub ScriptManager1_AsyncPostBackError(ByVal sender As Object, ByVal e As System.Web.UI.AsyncPostBackErrorEventArgs)
If (e.Exception.Data("ExtraInfo") <> Nothing) Then
ScriptManager1.AsyncPostBackErrorMessage = _
e.Exception.Message & _
e.Exception.Data("ExtraInfo").ToString()
ScriptManager1.AsyncPostBackErrorMessage = _
"An unspecified error occurred."
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>UpdatePanel Error Handling Example</title>
<style type="text/css">
#UpdatePanel1 {
width: 200px; height: 50px;
border: solid 1px gray;
#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">
<asp:ScriptManager ID="ScriptManager1"
OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" runat="server" >
<Scripts>
<asp:ScriptReference Path="ErrorHandling.js" />
</Scripts>
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server" Width="39px"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" Width="39px"></asp:TextBox>
<asp:Label ID="Label1" runat="server"></asp:Label><br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="calculate" />
</ContentTemplate>
</asp:UpdatePanel>
<div id="AlertDiv">
<div id="AlertMessage">
<div id="AlertButtons">
<input id="OKButton" type="button" value="OK" runat="server" onclick="ClearErrorState()" />
</form>
</body>
</html>
全球化浏览器中显示的日期和时间
以下示例演示如何设置 属性,
EnableScriptGlobalization
以便客户端脚本可以在浏览器中显示特定于区域性的日期和时间。 在此示例中,
Culture
@ Page
指令的 属性设置为
auto
。 因此,在当前浏览器设置中指定的第一种语言将确定页面的区域性和 UI 区域性。 有关详细信息,请参阅
如何:为网页全球化设置区域性和 UI 区域性 ASP.NET
。
<%@ Page Language="C#" Culture="auto" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Globalization Example</title>
</head>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" EnableScriptGlobalization="true" runat="server">
</asp:ScriptManager>
<script type="text/javascript">
function pageLoad() {
Sys.UI.DomEvent.addHandler($get("Button1"), "click", formatDate);
function formatDate() {
var d = new Date();
try {
$get('Label1').innerHTML = d.localeFormat("dddd, dd MMMM yyyy HH:mm:ss");
catch(e) {
alert("Error:" + e.message);
</script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" GroupingText="Update Panel">
<asp:Button ID="Button1" runat="server" Text="Display Date" />
<asp:Label ID="Label1" runat="server"></asp:Label>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
<%@ Page Language="VB" Culture="auto" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Globalization Example</title>
</head>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" EnableScriptGlobalization="true" runat="server">
</asp:ScriptManager>
<script type="text/javascript">
function pageLoad() {
Sys.UI.DomEvent.addHandler($get("Button1"), "click", formatDate);
function formatDate() {
var d = new Date();
try {
$get('Label1').innerHTML = d.localeFormat("dddd, dd MMMM yyyy HH:mm:ss");
catch(e) {
alert("Error:" + e.message);
</script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" GroupingText="Update Panel">
<asp:Button ID="Button1" runat="server" Text="Display Date" />
<asp:Label ID="Label1" runat="server"></asp:Label>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
本主题内容:
将 ScriptManager 控件与母版页、用户控件和其他子组件配合使用
脚本管理和注册
Web 服务引用
声明性语法
控件
ScriptManager
是 ASP.NET 中 Ajax 功能的核心。 控件管理页面上的所有 ASP.NET Ajax 资源。 这包括将 Microsoft Ajax 库脚本下载到浏览器,并协调使用
UpdatePanel
控件启用的部分页面更新。 此外,控件
ScriptManager
使你能够执行以下操作:
注册与部分页更新兼容的脚本。 为了管理脚本与核心库之间的依赖关系,注册的任何脚本在Microsoft Ajax 库脚本之后加载。
指定是将发布脚本还是调试脚本发送到浏览器。
通过向 控件注册 Web 服务,通过脚本提供对 Web 服务
ScriptManager
方法的访问。
通过向 控件注册这些服务,从客户端脚本提供对 ASP.NET 身份验证、角色和配置文件应用程序服务
ScriptManager
的访问权限。
在浏览器中启用特定于区域性的 ECMAScript (JavaScript)
日期
、
数字
和
字符串
函数。
使用
ResourceUICultures
控件的
ScriptReference
属性访问嵌入式脚本文件或独立脚本文件的本地化资源。
向 控件注册实现
IExtenderControl
或
IScriptControl
接口的服务器
ScriptManager
控件,以便呈现客户端组件和行为所需的脚本。
Partial-Page渲染
ASP.NET 页支持部分页面呈现的能力受以下因素控制:
控件
ScriptManager
的
EnablePartialRendering
属性必须
true
(默认值) 。
页面上必须至少有一个
UpdatePanel
控件。
属性
SupportsPartialRendering
必须
true
(默认值) 。
SupportsPartialRendering
如果未显式设置 属性,则其值基于浏览器功能。
可以在页面
Init
事件期间或之前在运行时重写 属性的值
EnablePartialRendering
。 如果在页面
Init
事件发生后尝试更改此属性,则会引发异常
InvalidOperationException
。
当支持部分页呈现时,控件
ScriptManager
将呈现脚本以启用异步回发和部分页更新。 要更新的页面的区域是使用
UpdatePanel
控件指定的。 控件
ScriptManager
处理异步回发,并仅刷新页中必须更新的区域。 有关分页呈现的详细信息,请参阅
分页呈现概述
。 有关导致更新的条件的详细信息,请参阅
UpdatePanel 控件概述
。
将 ScriptManager 控件与母版页、用户控件和其他子组件配合使用
一个页面在其层次结构中只能包含一个
ScriptManager
控件。 若要在父页已有
ScriptManager
控件时为嵌套页、用户控件或组件注册服务和脚本,请使用 控件
ScriptManagerProxy
。 有关详细信息,请参阅
将 UpdatePanel 控件与母版页配合使用
。
脚本管理和注册
控件
ScriptManager
使你能够注册随后作为页面的一部分呈现的脚本。 控制
ScriptManager
注册方法可分为以下三类:
用于保证维护 Microsoft Ajax 库上的脚本依赖项的注册方法。
不依赖于 Microsoft Ajax 库但与
UpdatePanel
控件兼容的注册方法。
支持使用控件的
UpdatePanel
注册方法。
有关如何在 ASP.NET 中创建和使用 Ajax 脚本的详细信息,请参阅
使用 Microsoft Ajax 库创建自定义客户端脚本
。
注册依赖于 Microsoft Ajax 库的脚本
可以使用以下方法来注册脚本文件,以确保维护Microsoft Ajax 库的任何依赖项。
RegisterScriptControl
注册一个服务器控件,该控件实现
IScriptControl
用于定义
Sys.Component
客户端对象的接口。 控件
ScriptManager
呈现支持客户端对象的脚本。
RegisterExtenderControl
注册一个服务器控件,该控件实现
IExtenderControl
用于定义
Sys.Component
客户端对象的接口。 控件
ScriptManager
呈现支持客户端对象的脚本。
注册Partial-Page更新兼容脚本
可以使用以下方法注册不依赖于 Microsoft Ajax 库但与
UpdatePanel
控件兼容的脚本文件。 这些方法对应于 控件的
ClientScriptManager
类似方法。 如果要呈现脚本以在控件内
UpdatePanel
使用,请确保调用控件的方法
ScriptManager
。
RegisterClientScriptInclude
在
script
页面的开始
<form>
标记之后呈现元素。 通过将 属性设置为
src
指向脚本文件的 URL 来指定脚本内容。
RegisterClientScriptResource
在
script
页面的开始
<form>
标记之后呈现元素。 脚本内容是使用程序集中的资源名称指定的。 属性
src
通过调用从程序集中检索命名脚本的 HTTP 处理程序自动填充 URL。
RegisterExpandoAttribute
在指定控件的标记中呈现 (expando) 的自定义名称/值属性对。
RegisterHiddenField
呈现隐藏的字段。
RegisterOnSubmitStatement
注册为响应
form
元素
submit
的事件而执行的脚本。 属性
onSubmit
引用指定的脚本。
RegisterStartupScript
在页面的结束
</form>
标记之前呈现启动脚本块。 要呈现的脚本指定为字符串参数。
注册方法时,为该脚本指定类型/密钥对。 如果已注册具有相同类型/密钥对的脚本,则不会注册新脚本。 同样,如果使用已存在的类型/资源名称对注册脚本,
script
则不会再次添加引用该资源的元素。 注册以前注册的属性的 expando 属性时,将引发异常。 允许重复注册数组值。
调用
RegisterClientScriptInclude
或
RegisterClientScriptResource
方法时,请避免注册执行内联函数的脚本。 请改为注册包含函数定义的脚本,例如应用程序的事件处理程序或自定义类定义。
UpdatePanel 控件的注册方法
使用控件时
UpdatePanel
,可以使用以下方法自定义分页更新。
RegisterDispose
为控件内的
UpdatePanel
控件注册释放脚本。 在更新或删除
UpdatePanel
控件时会执行脚本。 dispose 方法用于属于 Microsoft Ajax 库的客户端组件,并且当组件不再使用时必须释放资源的客户端组件。
RegisterPostBackControl
将控件注册为完整回发的触发器。 此方法用于控件中的
UpdatePanel
控件,否则这些控件将执行异步回发。
Web 服务引用
可以通过创建
ServiceReference
对象并将其添加到
Services
控件的集合来注册要从客户端脚本调用的
ScriptManager
Web 服务。 ASP.NET 为
ServiceReference
集合中的每个
Services
对象生成一个客户端代理对象。 可以编程方式将 对象添加到
ServiceReference
集合中,
Services
以在运行时注册 Web 服务。
有关如何在脚本中访问 Web 服务的详细信息,请参阅
在 ASP.NET AJAX 中向客户端脚本公开 Web 服务和
从 ASP.NET AJAX 中的客户端脚本调用 Web 服务
。
控件
ScriptManager
在呈现页中生成指向相应本地化脚本文件的引用,这些文件是嵌入在程序集中的脚本文件或独立脚本文件。
EnableScriptLocalization
当 属性设置为
true
时,控件
ScriptManager
将检索本地化资源 (,例如当前区域性) 的本地化字符串(如果存在)。 控件
ScriptManager
提供以下用于使用本地化资源的功能:
嵌入程序集中的脚本文件
。 控件
ScriptManager
确定要发送到浏览器的区域性特定或回退区域性脚本文件。 它通过使用区域性特定的
NeutralResourcesLanguageAttribute
程序集属性、随程序集一起打包的资源以及浏览器的 UI 区域性 ((如果有任何) )来执行此操作。
独立脚本文件
。 控件
ScriptManager
使用
ResourceUICultures
对象的 属性
ScriptReference
定义支持的 UI 区域性列表。
在调试模式下
。 控件
ScriptManager
尝试呈现包含调试信息的特定于区域性的脚本文件。 例如,如果页面处于调试模式,并且当前区域性设置为 en-MX,则控件将呈现一个名称为 .en-MX.debug.js 的
scriptname
脚本文件(如果该文件存在)。 如果文件不存在,则会呈现相应回退区域性的调试文件
有关如何本地化资源的详细信息,请参阅
本地化组件库的资源概述
。
当在异步回发期间发生页面错误时
AsyncPostBackError
,将引发 事件。 服务器上错误发送到客户端的方式取决于
AllowCustomErrorsRedirect
Web.config 文件的 属性、
AsyncPostBackErrorMessage
属性和自定义错误部分。 有关详细信息,请参阅
自定义 UpdatePanel 控件的错误处理
。
声明性语法
<asp:ScriptManager
AllowCustomErrorsRedirect="True|False"
AsyncPostBackErrorMessage="string"
AsyncPostBackTimeout="integer"
AuthenticationService-Path="uri"
EnablePageMethods="True|False"
EnablePartialRendering="True|False"
EnableScriptGlobalization="True|False"
EnableScriptLocalization="True|False"
EnableTheming="True|False"
EnableViewState="True|False"
ID="string"
LoadScriptsBeforeUI="True|False"
OnAsyncPostBackError="AsyncPostBackError event handler"
OnDataBinding="DataBinding event handler"
OnDisposed="Disposed event handler"
OnInit="Init event handler"
OnLoad="Load event handler"
OnPreRender="PreRender event handler"
OnResolveScriptReference="ResolveScriptReference event handler"
OnUnload="Unload event handler"
ProfileService-LoadProperties="string"
ProfileService-Path="uri"
RoleService-LoadRoles="True|False"
RoleService-Path="uri"
runat="server"
ScriptMode="Auto|Inherit|Debug|Release"
ScriptPath="string"
SkinID="string"
SupportsPartialRendering="True|False"
Visible="True|False"
<AuthenticationService
Path="uri"
<ProfileService
LoadProperties="string"
Path="uri"
<RoleService
LoadRoles="True|False"
Path="uri"
<Scripts>
<asp:ScriptReference
Assembly="string"
IgnoreScriptPath="True|False"
Name="string"
NotifyScriptLoaded="True|False"
Path="string"
ResourceUICultures="string"
ScriptMode="Auto|Debug|Inherit|Release"
</Scripts>
<Services>
<asp:ServiceReference
InlineScript="True|False"
Path="string"
</Services>
</asp:ScriptManager>