【问题标题】:ASP.Net UpdatePanel ImageButton causes "this._postbackSettings.async is null or not an object"ASP.Net UpdatePanel ImageButton 导致“this._postbackSettings.async 为空或不是对象”
【发布时间】:2010-09-08 17:42:36
【问题描述】:

我在一个 popupControlExtender 内的更新面板上收到此错误,该面板位于 dragPanelExtender 内。

我看到很多其他人都有这个问题,并且有各种修复方法,但没有一个对我有用。

我很想听听关于为什么会发生这种情况的合乎逻辑的解释,以及将来避免此类问题的万无一失的方法。

我发现像其他人一样,当触发器是 LinkBut​​ton 而不是 ImageButton 时不会发生此错误,仍然想知道是否有人有解释。

【问题讨论】:

    标签: asp.net asp.net-ajax updatepanel


    【解决方案1】:

    我的最佳猜测是 UpdatePanel 无法正确地将自定义“异步”属性写入回发请求。这可能是由于阻止了包装它的控件之一(我的直觉是它是 popupControlExtender - 它往往与更新面板有奇怪的行为,因为它旨在管理其中的事件以用于显示/隐藏目的)。

    我建议您删除更新面板并根据您的特定业务需求推出您自己的解决方案,或者实现您自己的弹出脚本(可能更容易编写)。

    顺便说一下,对于某些背景,“this._postbackSettings.async”是您的 AJAX.NET 框架,试图确定这是否是异步调用。您可以通过在发送回发之前以编程方式设置它来克服它(捕获回发事件并将该字段添加到回发请求中,如果它不存在)。

    只是一些想法...我不相信有一个“即插即用”的答案!

    【讨论】:

    • 我最终使用了带有图像的 LinkBut​​ton,我发现这是最简单的解决方案,尽管您的建议通常可能更可靠。
    【解决方案2】:

    在 ScriptManager 控件上将“EnablePartialRendering”设置为 false 可防止该错误,但这不是最佳解决方案。取决于您的应用程序,失去部分渲染的好处可能很重要。

    仅作记录,我所做的与其他看到错误的人不完全相同。我有一个 PopupControlExtender,其中是一个复选框列表。我添加了一个带有 javascript 方法的“全选”链接,以编程方式全选/取消全选。我没有使用图像按钮。在添加 javascript 之前我没有看到错误,现在即使在删除它之后错误仍然存​​在。必须有另一个我错过的变化。

    我希望这对某人有所帮助...

    --马特

    【讨论】:

      【解决方案3】:

      我也遇到过同样的问题,但直到我最终找到了 https://siderite.dev/blog/thispostbacksettingsasync-is-null-or.html,这正是我想要的。

      为了避免将来可能出现死链接的问题,这里是代码:

      var script = @"
      if (Sys &&
          Sys.WebForms && Sys.WebForms.PageRequestManager &&
          Sys.WebForms.PageRequestManager.getInstance) 
      {
          var prm = Sys.WebForms.PageRequestManager.getInstance();
          if (prm &&
             !prm._postBackSettings)
          {
              prm._postBackSettings = prm._createPostBackSettings(false, null, null);
          }";
      
      ScriptManager.RegisterOnSubmitStatement(
          Page, 
          Page.GetType(), 
          "FixPopupFormSubmit", 
          script);
      

      如果提交时未设置 _postBackSettings,它会创建它们,导致空引用异常消失,因为 _postBackSettings.async 可用。

      希望这会有所帮助,

      G.

      【讨论】:

      • 自从我不再使用 Microsoft Ajax 以来,我已经很久没有处理这个问题了,但这看起来是一个不错的干净解决方案。
      猜你喜欢
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2012-11-19
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多