【问题标题】:Update Panel AsyncPostback Trigger not working in IE更新面板 AsyncPostback 触发器在 IE 中不起作用
【发布时间】:2013-12-28 22:09:35
【问题描述】:

在我的应用程序中,更新面板的 AsyncPostback 触发器IE 9 和 IE 10 中工作,但在 IE 8 和 postbacktrigger 中工作也适用于所有 IE 版本。

这会报错

Sys.WebForms.PageRequestManagerParserErrorException:消息 无法解析从服务器接收到的数据。

在发布这个问题之前我已经尝试了几件事:

  • async = true 在页面标记中
  • 在页面加载时注册回发(这不能用于整个系统的更新面板)
  • 在网络配置中允许异步

<asp:UpdatePanel runat="server">
                                   <ContentTemplate>
                                       <cc:BinNumberMultiDropDown runat="server" TabIndex="3"    ProgramTrue="true" ID="ddl_bin_number"
                                           CssClass="multiselect">
                                       </cc:BinNumberMultiDropDown>
                                       <asp:RequiredFieldValidator ID="rfv_ddl_bin_number" runat="server"    ControlToValidate="ddl_bin_number" ValidationGroup="vg_rate"    Display="Dynamic"
                                           SetFocusOnError="true"></asp:RequiredFieldValidator>
                                   </ContentTemplate>
                                   <Triggers>
                                       <asp:AsyncPostBackTrigger ControlID="ddl_program" EventName="SelectedIndexChanged" />
                                   </Triggers>
                               </asp:UpdatePanel>

请给我建议解决方案

我也发现这个错误只出现在Winodws 8系统中

【问题讨论】:

  • 你能发布你的代码示例吗?
  • @SpiderCode 我已添加代码
  • 你的 ddl_program 在哪里?它是更新面板外的下拉菜单吗?
  • 它在更新面板之外
  • 浏览器是否有任何 ajax/xhr 请求?如果是这样,当 AsyncPostback 不起作用时的响应是什么?

标签: javascript asp.net windows internet-explorer updatepanel


【解决方案1】:
<asp:UpdatePanel ID="MainContainerUpdatePanel" ChildrenAsTriggers="false" UpdateMode="Conditional" runat="server">

【讨论】:

    【解决方案2】:

    检查您的浏览器定义文件是否已在服务器上更新,有许多与 javascript 回发处理相关的问题是由 .Net 错误地检测到新版本的 IE 引起的。 有许多修补程序可以更新文件,请参阅 Scott Hanselmann 的博客了解更多详细信息:

    http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx

    http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedjavascriptErrorOrMaintainFF5ScrollbarPosition.asp

    【讨论】:

      【解决方案3】:
      protected void Page_Load(object sender, EventArgs e) {
        ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
        scriptManager.RegisterPostBackControl(btn.Your-BUTTON-HERE');
        //Further code goes here....
      }
      

      放上它就可以了,或者如果您有多个更新面板?让我们知道

      【讨论】:

      • 我不能这样做,因为这将需要对整个应用程序进行大量更改,这是不值得的
      【解决方案4】:

      我遇到了同样的问题。我分析了原因并找到了许多关于问题原因和解决方法的好帖子。其中之一在Eilon Lipton's blog

      为什么我不断收到 PageRequestManagerParserErrorException?

      嗯,你很可能正在做文章中提到的事情之一 错误信息。以下是最常见的原因以及为什么不这样做 工作:

      1.调用 Response.Write()

      通过直接调用Response.Write(),你绕过了正常的 ASP.NET 控件的呈现机制。你写的位正在 直接发送给客户,无需进一步处理(嗯, 大多...)。这意味着UpdatePanel 无法在其 特殊格式。

      2.响应过滤器:

      类似于Response.Write(),响应过滤器可以改变 以UpdatePanel 不知道的方式呈现。

      3.HttpModules:同样,与Response.Write() 和响应过滤器的处理相同。

      4.启用服务器跟踪:如果我要再次实现跟踪,我会采取不同的做法。 Trace 被有效地写出使用 Response.Write(),因此搞乱了我们的特殊格式 用于UpdatePanel

      5.调用 Server.Transfer(): 不幸的是,无法检测到调用了 Server.Transfer()。这意味着 UpdatePanel 有人来电时无能为力 Server.Transfer()。发送回客户端的响应是 HTML 您转移到的页面上的标记。因为它的 HTML 而不是 特殊格式,无法解析,你会得到错误。怎么做 我避免得到PageRequestManagerParserErrorException

      首先,不要执行上述列表中的任何操作!以下是如何避免给定错误的匹配列表(如果可能):

      调用 Response.Write(): 在您的页面上放置 &lt;asp:Label&gt; 或类似控件并设置其 Text 属性。额外的好处是 您的页面将是有效的 HTML。当使用Response.Write()你 通常以包含无效标记的页面结束。

      响应过滤器:解决方法可能只是不使用过滤器。无论如何,它们并不经常使用。如果可能的话,在 控制水平而不是响应水平。

      HttpModules:与响应过滤器相同。

      启用服务器跟踪:使用其他形式的跟踪,例如写入日志文件、Windows 事件日志或自定义机制。

      对 Server.Transfer() 的调用:我不确定人们为什么要使用 Server.Transfer()。也许这是经典的遗产 ASP。我建议使用带有查询字符串的Response.Redirect() 参数或跨页发布。

      另一种避免解析错误的方法是定期回发而不是asynchronous postback。例如,如果您有一个 绝对必须做一个Server.Transfer()的按钮,让它做 定期回发。有多种方法可以做到这一点:

      • 最简单的方法是简单地将按钮放在任何UpdatePanels 之外。不幸的是,您的页面布局可能不允许 为此。
      • PostBackTrigger 添加到指向按钮的UpdatePanel。如果按钮是静态声明的,这很好用 通过页面上的标记。
      • 致电ScriptManager.RegisterPostBackControl() 并输入相关按钮。这是控件的最佳解决方案 动态添加,例如重复模板中的那些。

      【讨论】:

        【解决方案5】:

        我认为您使用的是 .net 框架 4.0,Windows 8 的框架 4.0 中存在一些问题,如果可能的话,您可以尝试在框架 4.5 中转换您的应用程序。

        【讨论】:

          猜你喜欢
          • 2014-11-04
          • 1970-01-01
          • 1970-01-01
          • 2016-10-09
          • 1970-01-01
          • 1970-01-01
          • 2011-12-20
          • 2016-10-19
          相关资源
          最近更新 更多