更新面板AsyncPostback触发器无法在IE中运行

时间:2013-12-11 04:38:28

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

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

这给出了错误

  

Sys.WebForms.PageRequestManagerParserErrorException:消息   从服务器收到的邮件无法解析。

在发布此问题之前,我尝试了几件事:

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

<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系统中

5 个答案:

答案 0 :(得分:1)

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

  

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

  

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

答案 1 :(得分:1)

我遇到了同样的问题。我分析了原因和找到许多关于问题原因的好帖子&amp;如何解决它。其中一个在Eilon Lipton's blog上找到:

  

为什么我要继续获取PageRequestManagerParserErrorException?

     

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

     

1. 调用Response.Write()

     

直接拨打Response.Write()即可绕过常规   ASP.NET控件的渲染机制。你写的那些东西都要去了   没有进一步处理就直接发给客户(好吧,   大多...)。这意味着UpdatePanel无法对其中的数据进行编码   特殊格式。

     

2.Response过滤器:

     

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():在页面上放置<asp:Label>或类似控件并设置其Text属性。额外的好处是   您的网页将是有效的HTML。使用Response.Write()时你   通常最终会出现包含无效标记的页面。

     

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

     

HttpModules:与响应过滤器相同。

     

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

     

调用Server.Transfer():我不确定人们为什么会使用Server.Transfer()。也许这是Classic的遗产   ASP。我建议将Response.Redirect()与查询字符串一起使用   参数或跨页面发布。

     

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

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

答案 2 :(得分:0)

<asp:UpdatePanel ID="MainContainerUpdatePanel" ChildrenAsTriggers="false" UpdateMode="Conditional" runat="server">

答案 3 :(得分:0)

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 :(得分:0)

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