UpdatePanel 控件

UpdatePanel 控件UpdatePanel控件使用了UpdatePanel控件的方案是ASP.NETAJAX扩展中的重要方案。我们收到了许多关于此控件、UpdateProgress控件以及二者功能的客户反馈。我们已经通过大量更改改善了部分页面呈现,并支持构建与UpdatePanel控件兼容的控件。我们还针对异步回发生命周期实现了丰富的事件模型,使您能够自定义客户端的更新处理。Sc

大家好,又见面了,我是你们的朋友全栈君。

UpdatePanel 控件

使用了 UpdatePanel 控件的方案是 ASP.NET AJAX 扩展中的重要方案。我们收到了许多关于此控件、UpdateProgress 控件以及二者功能的客户反馈。我们已经通过大量更改改善了部分页面呈现,并支持构建与 UpdatePanel 控件兼容的控件。我们还针对异步回发生命周期实现了丰富的事件模型,使您能够自定义客户端的更新处理。

ScriptManager 控件

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 服务器控件中包含了已经注册脚本的控件,则此控件将能够被正确跟踪。

动态 UpdatePanel 控件

现有两种方法可将 UpdatePanel 控件动态添加到页面中,而且这两种方法已在 RTM 版本中得到改进。使用动态 UpdatePanel 控件的两种方法是:

  • 控件开发人员可以将 UpdatePanel 控件添加到其自定义复合控件中。如果此页面中存在 ScriptManager 控件,而且其 EnablePartialRendering 属性被设置为 true,则 UpdatePanel 控件可从自定义控件内部启用异步回发。如果页面中不存在 ScriptManager 控件,它还将提供回退到常规回发的能力。
  • 页面开发人员可以将 UpdatePanel 控件添加到其他控件的模板中。

以下代码说明了在自定义控件中对 UpdatePanel 控件的使用。

protected override void CreateChildControls() {
    base.CreateChildControls();

    ScriptManager sm = ScriptManager.GetCurrent(Page);
    Control parent;
    Control container;
    if (sm == null || !sm.EnablePartialRendering) {
        // 如果进行的不是部分呈现,请使用
        // 虚拟控件作为容器。
        parent = container = new Control();
    }
    else {
        // 创建 UpdatePanel 控件。
        UpdatePanel up = new UpdatePanel();

        // 不将子控件直接添加到 
        // UpdatePanel 控件,而是将它们添加到其 
        // ContentTemplateContainer。
        container = up.ContentTemplateContainer;
        parent = up;
    }

    AddDataControls(container);
    Controls.Add(parent);
}

异步回发期间的客户端事件

在 CTP 版本中,客户端 PageRequestManager 对象通过创建 XMLHttpRequest 对象和处理响应执行异步回发。在 RTM 版本中,PageRequestManager 对象提供了异步回发生命周期事件,因此,您可以自定义处理请求和响应的方式。以下是可用的客户端事件,以及可提供附加信息的相应事件参数。

  • initializeRequest: 您可以使用此事件来取消即将发出的新异步回发请求。此事件还支持您评估回发源,并完成任何其他所需的工作。此事件参数属于 InitializeRequestEventArgs 类型。
  • beginRequest:您可以使用此事件来完成诸如显示进度方面的工作。在此事件期间开始显示,并在 endRequest 事件期间隐藏显示。此事件参数属于 BeginRequestEventArgs 类型。
  • pageLoading: 您可以使用此事件来对正在进行更新或删除操作的面板执行其他处理,如运行清理代码。您还可以检查自服务器发送来的其他所有数据,以执行自定义工作。此事件参数属于 PageLoadingEventArgs 类型。
  • pageLoaded: 此事件与 pageLoading 类似,但却提供了由于异步回发而创建的其他所有 UpdatePanel 控件的相关信息。此事件参数属于 PageLoadedEventArgs 类型。
  • endRequest: 您可以使用此事件来自定义错误处理,并处理自服务器发送的其他数据。您还可以将其用于隐藏 UpdateProgress 控件。此事件参数属于 EndRequestEventArgs 类型。

开发与 UpdatePanel 控件兼容的控件

RTM 重要更改:在 ASP.NET 2.0 AJAX Extensions 1.0 最终版本中,Beta 和 RC 版本中包括的要与异步回发兼容的 ASP.NET AJAX 控件验证程序被删除。这可以避免与一组即将要在 .NET Framework 更新中发布的新验证程序产生冲突。

对于需要在已部署的应用程序中使用验证程序的应用程序开发人员来说,他们可以在名为 ASP.NET AJAX Validators(英文)的博客中了解到有关删除验证程序的信息以及使用验证程序解决问题的方法。博客中包括验证程序的源代码,开发人员可在必要时将其应用到应用程序中。

在提供 .NET Framework 更新时,应该尽快安装此更新,以便更新的验证程序可供宿主应用程序使用。

在 CTP 版本中,UpdatePanel 控件处理了许多被呈现的对象,其中还包括一些不在 UpdatePanel 控件中的对象,然后尝试在页面上对所有更改进行完全更新。这使一些控件无法与 UpdatePanel 控件兼容。例如,在 CTP 版本中,如果动态添加或删除了 ASP.NET 验证程序控件,那么,这些控件将不会在 UpdatePanel 中正常工作,例如使用 Wizard 控件在每一步对用户输入进行验证的时候。

而在 RTM 版本中此模式已得到改进。若要将脚本或数据发送到客户端,应该使用 ScriptManager 控件对其进行注册,这与注册脚本库的方式相同。以下示例展示了 RTM 版本中与 UpdatePanel 控件兼容的自定义控件。

protected override void OnPreRender(EventArgs e) {
    base.OnPreRender(e);

    Control control = FindControl(_controlID);

   // 通过新的 ScriptManager API 注册脚本。
   // 脚本与新 PageRequestManager 事件联系起来。
   string script = String.Format(
   CultureInfo.InvariantCulture,
   @"var {0}_hover = new Microsoft.Samples.HoverExtender(document.getElementById('{1}'), '{2}');
{0}_hover.attach();
",
   ClientID,
   control.ClientID,
   ColorTranslator.ToHtml(BackgroundColor));

   ScriptManager.RegisterClientScriptInclude(
       this, typeof(HoverExtender), "HoverExtenderScript",
        ResolveClientUrl("~/ScriptLibrary/HoverExtender.js"));
        ScriptManager.RegisterStartupScript(
            this, typeof(HoverExtender), ClientID, script, true);
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163532.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MongoDB(一)—–MongoDB的用户与权限管理

    MongoDB(一)—–MongoDB的用户与权限管理

    2020年11月12日
    214
  • Windows操作系统双因素身份认证解决方案

    Windows操作系统双因素身份认证解决方案Windows桌面帮助企业将办公桌面快速、集中部署在平台上,方便进行管理维护且节省企业成本,能让员工随时随地登录到自己的windows桌面环境中,实现移动办公。安全事件频发的现在,在单一的静态密码登录验证机制下,非法入侵者若窃听到桌面登录账号的用户名及密码,即可通过合法访问权限访问内部系统,企业信息安全面临挑战;企业为防止账号信息泄露,通常强制要求员工定期更换登录密码,给员工及IT运维人员带来许多不必要的麻烦;其次没有及时收回的账号,离职员工仍然有桌面的合法访问权限,因此额外增加了IT部门的账号回收管理

    2025年7月9日
    6
  • awk从放弃到入门(1):awk基础 (通俗易懂,快进来看)「建议收藏」

    awk从放弃到入门(1):awk基础 (通俗易懂,快进来看)「建议收藏」我们先来用专业的术语描述一下awk是什么,如果你看不懂,没关系,我们会再用"大白话"解释一遍。 awk是一个报告生成器,它拥有强大的文本格式化的能力,这就是专业的说法。你可能不理解所谓的报告生成器中的"报告"是什么,你可以把"报告"理解为"报表"或者"表格",也就是说,我们可以利用awk命令,将一些文本整理成我们想要的样子,比如把一些文本整理成"表"的样子,然后再展示出来,刚才概念中提到的

    2022年7月11日
    29
  • 达梦数据库查询语句「建议收藏」

    达梦数据库查询语句「建议收藏」DMSQL简介DM_SQL语言是一种介于关系代数与关系演算之间的语言,其功能主要包括数据定义、查询、操纵和控制四个方面,通过各种不同的SQL语句来实现。按照所实现的功能,DM_SQL语句分为以下几种:用户、模式、基表、视图、索引、序列、全文索引、存储过程和触发器的定义和删除语句,基表、视图、全文索引的修改语句,对象的更名语句;查询(含全文检索)、插入、删除、修改语句;数据库安全语句…

    2025年10月7日
    2
  • Kafka Streams实战-开发入门

    Kafka Streams实战-开发入门本文会介绍 KafkaStreams KafkaStreams 的 HelloWorld 例子 深入探索基于 KafkaStreams 的 ZMart 应用程序 把输入流拆分为多个流 1 StreamsAPIsK 有两类流 APIs low levelProcess 和 high levelStreams 本文介绍的是后者 DSL 它的核心是 KStrea

    2025年10月8日
    6
  • 关于.gitignore不起作用「建议收藏」

    关于.gitignore不起作用「建议收藏」由于公司和家里的as版本不同,倒腾了好久,但是代码到本地后build.gradle等文件做了修改,为了不影响公司版本,故家里的需要忽略这些文件的修改,想到的就是加gitignore配置,直接添加不起效果,找到如下办法:有时我们发现添加.gitignore文件后并没有忽略我们想要忽略的文件,解决方法就是清除一下缓存,原因gitignore对已经追踪(track)的文件无效,清除缓存后文件将以未追

    2022年10月21日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号