在我的应用程序更新面板的AsyncPostback触发器 IE 9和IE 10 ,但在IE 8和postbacktrigger中工作是也适用于所有IE版本。
这给出了错误
Sys.WebForms.PageRequestManagerParserErrorException:消息 从服务器收到的邮件无法解析。
在发布此问题之前,我尝试了几件事:
<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系统中
答案 0 :(得分:1)
检查您的浏览器定义文件是否在服务器上更新,由于.Net错误地检测到IE的新版本而引起的javascript回发处理存在许多问题。 有许多修补程序补丁可以更新文件,有关详细信息,请参阅Scott Hanselmann的博客:
http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx
和
答案 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中转换您的应用程序。