Beta 2 更改:ScriptManager 控件提供了 SupportsPartialRendering 属性,该属性的初始值是从服务器上的浏览器功能派生而来的。对于不支持部分页面呈现的浏览器,应将 UpdatePanel 控件回退到使用常规回发。
Beta 2 更改:ScriptManager 控件提供一个兼容 SetFocus API,它使开发人员能够在浏览器中管理焦点。
Beta 2 更改:ScriptManager 控件提供了 RegisterDispose 方法,可在注册客户端组件时作为可释放对象进行调用。这意味着组件需要将相关的 DOM 元素与 UpdatePanel 控件放在一起使用。
RC 更改:ScriptManager 类中新增了一种 RegisterDispose 方法,它使控件和扩展器能够将其客户端组件作为可释放对象进行注册,而不需要使用 DOM 元素。这一操作是在 ScriptDescriptor 类型中自动完成的。
RTM 更改: 参见之前部分对静态脚本注册方法新重载的说明,它将 Page 对象而非 Control 对象视为参数。
在 RTM 版本中,ScriptManager 控件具有 EnablePartialRendering 属性,其默认值为 true。这减少了使用 UpdatePanel 控件定义异步回发时所需的步骤。
为了降低控件的复杂程度,已将 ScriptManager 的 ErrorTemplate 属性从 RTM 版本中删除。如今的错误处理模式更具灵活性,例如创建独立的新服务器控件。另外,您还可以通过 ScriptManager 的 AsyncPostBackErrorMessage 属性添加错误处理。它仅仅设置了默认的错误信息。若要动态自定义消息,则可以处理 AsyncPostBackError 事件。
现在,ScriptManager 提供了一个 AsyncPostBackTimeout 属性,以控制异步回发的超时时间。
ScriptManager 控件支持服务器控件可能需要的新资源注册方法。这些方法增加了对 UpdatePanel 方案的支持,并降低了 CTP 版本中 UpdatePanel 控件的复杂性。资源可包括脚本、样式、隐藏字段等等。脚本注册方法与 ClientScriptManager 方法相对应。它们能够接受将控件实例作为参数,因此如果 UpdatePanel 服务器控件中包含了已经注册脚本的控件,则此控件将能够被正确跟踪。
Beta 2 更改:增加了全球化和本地化功能。
RC 更改:在 RC 版本中,利用全球化功能集,您可以使用新的 parse 和 localeParse 方法来执行 Date 和 Number 分析。
RTM 重要更改: Date.parse 和 Number.parse 函数已重命名为 Date.parseInvariant 和 Number.parseInvariant。同样,Date.localeParse 和 Number.localeParse 函数已重命名为 Date.parseLocale 和 Number.parseLocale。这些更改使 API 保持一致。更重要的是,对于依赖于这些类型的内置 parse 函数的特定行为的应用程序,它们消除了这些应用程序的潜在问题。
Client FX 中的全球化是通过 Sys.CultureInfo 类型进行支持的。此类型定义两个 JSON 对象:InvariantCulture 和 CurrentCulture。
在 CTP 版本中,CurrentCulture 类型是通过从客户端应用程序调用的服务器处理程序设置的。而在 RTM 版本中,此类型以内联方式编写到页面中。该更改删除了对服务器的回调,但内联类型不能在客户端中缓存。然而,这些对象很小。
在即将于 ScriptManager 控件中呈现时,通过为给定线程的 CurrentCulture 序列化 .NET CultureInfo 对象,服务器框架可以创建客户端 Sys.CultureInfo.CurrentCulture。这意味着使用 ASP.NET 2.0 中的服务器技术,您能以编程方式定义 Culture,默认情况下,它使用来自传入请求的 ACCEPT_LANG 标题的映射。通常,您会在页面的 @ Page 指令中设置 Culture=”Auto”、UICulture=”Auto”,或者直接设置这些值,例如通过调用生成的页类中的 InitializeCulture 方法。
在客户端,您的代码和从服务器扩展器生成的任何类型都可以使用添加到 Number、Date 和 String 类型的 format 和 localeFormat API,以及添加到 Date 和 Number 类型的 parseInvariant 和 parseLocale API。以下示例演示了使用预定义的 CultureInfo 对象格式化 Date 对象,并分析 Date 对象的输入。
var d = new Date(); $('DateLocale').innerHTML = d.toFormattedString("M"); // 呈现的输出假定了一个为 Culture=”fr” 获得的 CultureInfo // 10 月 31 日
在 RTM 版本中,新的 API 允许特定格式。
var d = new Date(); $get('DateLocale').innerHTML = d.localeFormat("M"); // 呈现的输出假定了一个为 Culture=”fr” 获得的 CultureInfo // 10 月 31 日 // 解析。假定输入值遵循 'd' 格式 var s = $get('TextBoxDate').value.trim(); var d = Date.parseLocale (s, "d"); $get('Date').innerHTML = d;
要使用全球化支持,您必须将 ScriptManager.EnableScriptGlobalization 属性显式设置为 true,如以下示例所示。如前文所述,您将会发现有一个 JSON 对象以内联方式编写到页面中。
<asp:scriptmanager runat=”server” EnableScriptGlobalization=”true” />
RC 更改:在 RC 版本中修复了许多程序错误。尤其是,有关基于路径的脚本引用的 ResourceUICultures 支持已得到了修复。
RTM 版本还新增了本地化支持。支持的主线方案为:
- 客户端组件具有 UI 元素、异常消息和组件专用的其他项。在这种情况下,可以通过两种方式为客户端组件提供本地化资源:使用嵌入式资源(附属程序集),或者使用库脚本引用本身的一部分。
- 客户端组件具有公共属性,可由页面开发人员设置并直接进行本地化。此时,也存在两种可能的方案:通过服务器扩展器控件或脚本控件来处理组件,或者在客户端由页面开发人员直接创建组件。
组件的本地化资源作为 JSON 对象来提供,并通过对象在组件中引用。例如,在 client FX 中,如果使用 Sys.Res.<ExceptionMessageKey> 类型引用消息,则会在调试脚本中引发异常消息。
当脚本资源处理程序从服务器程序集的嵌入式资源中读取脚本时,这些对象通常由脚本资源处理程序自动附加到脚本引用
服务器程序集的本地化资源
RC 更改:可对 ScriptResource.axd 处理程序进行配置以进行缓存和压缩。此处理程序现在也支持 WebResource.axd 处理程序所支持的资源替代逻辑。可在嵌入的 Web 资源中添加替代参考,然后由 ScriptResource.axd 处理程序对这些资源进行处理。
注意 :替代码 (<%=WebResource() %>
) 将插入一个 Webresource.axd URL,<%= ScriptResource() %>
代码将插入一个 ScriptResource.axd URL。
RC 更改:从嵌入式服务器资源生成的自定义客户端类型和命名空间会自动注册。
根据传入浏览器的 ACCEPT_LANG 标题,脚本库的资源由服务器提供和生成。RTM 版本中新增了脚本资源处理程序,负责生成流向同时包含脚本库代码和给定 UICulture 值的自动生成资源的客户端的流。如果需要,您可以为一组 UICulture 值使用 ASP.NET 代码;使用 ACCEPT_LANG 只是默认模型。
组件开发人员可以利用附属资源的 .NET 本地化模型(打包、服务优势),并依赖自动生成来通过任何 UICulture 回退模型供应相关资源。这意味着正常的 .NET 本地化工作流和工具集都促成了此模型。
默认情况下,网页中不会启用本地化,要使用本地化,您必须将 ScriptManager.EnableScriptLocalization 属性设置为 true,如以下示例所示:
<asp:scriptmanager runat=”server” EnableScriptLocalization=”true” />
以下代码段演示了创建具有本地化资源的自定义扩展器控件的过程。这些资源通过客户端中的自定义类型进行引用。假定该项目是一个名为 Custom.UI.ToggleButton 的类库。
// AssemblyInfo.cs // 定义脚本资源属性。 // WebResource 定义客户端行为的脚本库 [assembly:webResource("Custom.UI.ToggleButton.ToggleButtonBehavior.js" , "text/javascript")] // ScriptResource 属性引用 WebResource 属性, // 指向嵌入式 RESX(作为资源)的名称并定义 // 自定义客户端类型。 [assembly: ScriptResource("Custom.UI.ToggleButton.ToggleButtonBehavior.js", "Custom.UI.ToggleButton.ToggleButtonBehavior", "Custom.UI.Res")] // ToggleButtonBehavior.js // 在类库中标记为嵌入式资源。 .. this.get_element().innerHTML = Custom.UI.Res.unhoverText; .. // ToggleButtonBehavior.resx, ToggleButtonBehavior.fr.resx // ToggleButtonBehavior.ja.resx, .. // 标记为嵌入式资源。它们由 Visual Studio 编译为 // 嵌入式 .resource ‘文件’。 // 非特定区域性嵌入到主程序集中,其他的则 // 嵌入到区域性文件夹结构下的附属程序集中
在此扩展器的使用页面中,您声明了扩展器和前面所示的 ScriptManager 控件。当该页面运行时,ScriptManager 控件使用 ScriptResource.axd 处理程序生成库脚本的脚本引用。该请求指示处理程序获取库脚本,而且还获取给定 UI-culture 的相关资源。此资源集然后被序列化为前面 ScriptResource 属性所示的已定义的自定义类型。
以下代码段演示了发送到客户端的脚本库输出。
.. // 框架自动生成的类型 Type.registerNamespace('Custom.UI'); Custom.UI.Res={ ""unhoverText":"©±", ""hoverText":"¤µ©±" };
基于文件的静态脚本的本地化资源
服务器使用包含 ScriptManager 控件的模型来呈现脚本库的资源,但没有内置的即时进程可供用于合并该库和当前 UICulture 的相关资源。相反,服务器解释上面所述的 UICulture,但它期望脚本库及其资源先前可能已通过生成过程进行了合并。该生成过程可以包含基于程序集的库及其资源和附属程序集。
为了选择正确的脚本文件以提供请求,您将指示 ScriptManager 控件哪些 ResourceUICultures 值是通过使用有关脚本引用的属性进行支持的,如以下示例所示:
<asp:scriptmanager runat="server" EnableScriptLocalization="true" ScriptMode="Release"> <scripts> <asp:scriptreference path="~/scripts/Custom.UI.js" ResourceUICultures="en-GB, fr-FR, fr-CA, ja-JP, de-DE" /> </scripts> </asp:scriptmanager> // 如果线程上的 UICulture 为 ja-JP,则 // 呈现以下脚本引用。 // (请注意,ScriptMode 设置为 "Release"。) <script src=”../scripts/Custom.UI.ja-JP.js />
ScriptManager 控件从服务器中的线程推断 UICulture、解释脚本引用(提供回调的某些方式),并发送对应于给定 UICulture 的脚本库。