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);
}

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • idea 2021.4 mac版激活码_通用破解码

    idea 2021.4 mac版激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Linux 的解压缩文件命令「建议收藏」

    Linux 的解压缩文件命令「建议收藏」博客园首页新随笔联系管理随笔-122 文章-0 评论-14 压缩文件 tar -zcvf my.tarabcabc.txtar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。常用格式:单个文件压缩打包tarczvfmy.tarfile1多个文件压缩打包tarczvfmy.tarfile1file2,…单个目录压缩打包tarczvfmy.tar…

  • pytest skipif_pytest如何循环执行用例

    pytest skipif_pytest如何循环执行用例前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

  • hibernate createquery_executequery方法出错

    hibernate createquery_executequery方法出错/** *添加 */ publicvoidsave(Stustu){   try{    tran=this.GetSession().beginTransaction();    this.GetSession().save(stu);    tran.commit();   }catch(HibernateExceptione){

  • excel转json操作

    excel转json操作工作中需要用到将从数据库中下载的excel每行数据转成json文件,用于规则回溯,参考网上资料,通过以下代码可实现:importpandasaspdimportnumpyasnpimportjsonimportdatetime#导入数据#由于phone2有缺失值,如果不加converters={‘phone2’:str},导致读入会变成float形式,导致有值的手机号码后会加点0,如13812341234.0data=pd.read_excel(r’C:\Users\

  • maven找不到包但是确实引入了_idea写python好吗

    maven找不到包但是确实引入了_idea写python好吗直接上图,记住选中的位置要设置为Resouce,不然from导入时,会导致pycharm自动从cronjob根路径导入。放linux中运行时,涉及到调用的时候,就报错cronjob包找不到,因为只能找到当前执行的python文件下开始找,而不能找到父包设置位置在这里:…

发表回复

您的电子邮箱地址不会被公开。

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