【问题标题】:Making a difference between AsyncPostbacks in nested UpdatePanels in Asp.Net AJAX在 Asp.Net AJAX 的嵌套 UpdatePanel 中的 AsyncPostbacks 之间有所不同
【发布时间】:2010-11-28 09:44:17
【问题描述】:

在一个 ASP.net AJAX 项目 (WebForms) 中,我有一个 UpdatePanel,而在 UpdatePanel 中我有多个带有 UpdatePanel 的嵌套控件,基本上我有控件树。

家长控制是网站的巨大且非常重要的部分。我不能触摸它,(而且它在很多地方被重复使用),UpdatePanel 应该保持在它的当前位置。

更新面板中的子控件具有相互分离的功能(它们也与 UpdatePanel 分离),以便能够仅刷新控件中的一部分。

基本上在 Page_Load() 上,我的代码可以为每个子控件提供数据,例如,如果我有一个删除功能,它正在修改子控件数据。步骤如下:

首先显示控件(ParentControl)。

  • Page_Load() -> 填充数据

如果我点击删除:

  • Page_Load() -> 填充数据   /* 不想在这里调用它! */

  • 事件删除->修改数据

           ->fullfill data again!
    

我需要对 AsyncPostbacks 进行编程上的改变,并在您只想执行事件时使用 Page_Load() 函数不调用完成数据。

在 UpdatePanel 之外,您可以使用 IsAsyncPostbackIsCallBackIsPostback 我知道这一点,但这些 属性不会改变在 AsyncPostback 上

我有 2 个 AsycPostbacks,我需要区分它们。:

  1. 首先这只是显示数据和初始化。
  2. 执行事件并对控件进行修改

有人知道一种实现技术,或者某种具有这种功能的框架吗?

有人有这个问题吗?

【问题讨论】:

    标签: asp.net ajax asp.net-ajax frameworks partial-postback


    【解决方案1】:

    我已经删除了我的另一个答案 - 看到你现在描述的问题与最初的问题完全不同,完全替换我的答案似乎很愚蠢,同时保留以前版本的代表。

    您将不得不检查导致异步回调的事件,或者检查每个更新面板中控件的某些值,以帮助您找出更改的内容。

    这是我决定不使用更新面板的关键原因之一,异步回发导致几乎所有页面生命周期事件发生,并且很难真正看到在复杂情况下发生了什么,例如这 - 我唯一一次愤怒地使用更新面板是在我的个人网站上环绕数据网格以在处理大量数据时保存整个页面重新加载。


    编辑添加:

    只是想帮忙,一个快速的谷歌出现了this (AJAX and the ASP.NET 2.0 Callback Framework)

    哪个控件发起了请求?

    在回发请求中,ScriptManager id 作为参数进行操作。通常,该值是启动部分回发的控件的 id。它的格式为 |。控件可以直接或通过 UpdatePanel 向 ScriptManager 注册。 ScriptManager.AsyncPostBackSourceElementID 属性将返回发起部分回发的控件的 ID。

    示例语法:

    ScriptManager1=UpdatePanel1|Button1
    

    该页面还详细介绍了生命周期以及流程中的各种挂钩。

    【讨论】:

    • 这确实工作得很好,ScriptManager.AsyncPostBackSourceElementID 属性返回一个 UniqueID,您可以使用 FindControl 来确定触发异步回发的位置。感谢您的解决方案!
    猜你喜欢
    • 2010-09-14
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多