相关文章推荐
博学的领带  ·  05-18 17:26:04.728 ...·  7 月前    · 
英俊的大脸猫  ·  Window postMessage() ...·  1 年前    · 
傻傻的课本  ·  CryptExportKey ...·  1 年前    · 
任性的数据线  ·  C++ ...·  1 年前    · 
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
Object
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>  
    
  •