Javascript 更新面板异步回发触发器在IE中不工作
在我的应用程序中,更新面板的AsyncPostback触发器在IE 9和IE 10中不工作,但在IE 8中工作,并且postbacktrigger也在所有IE版本中工作 这是一个错误 Sys.WebForms.PageRequestManagerParserErrorException:消息 无法分析从服务器接收的数据 在发布此问题之前,我尝试了以下几点:Javascript 更新面板异步回发触发器在IE中不工作,javascript,asp.net,windows,internet-explorer,updatepanel,Javascript,Asp.net,Windows,Internet Explorer,Updatepanel,在我的应用程序中,更新面板的AsyncPostback触发器在IE 9和IE 10中不工作,但在IE 8中工作,并且postbacktrigger也在所有IE版本中工作 这是一个错误 Sys.WebForms.PageRequestManagerParserErrorException:消息 无法分析从服务器接收的数据 在发布此问题之前,我尝试了以下几点: 页面标记中的async=true 在页面加载时注册回发(这不能使用,因为整个系统都在使用更新面板) 在web配置中允许异步 请告诉
- 页面标记中的async=true
- 在页面加载时注册回发(这不能使用,因为整个系统都在使用更新面板)
- 在web配置中允许异步
请告诉我解决办法
我还发现此错误仅出现在Winodws 8系统中
<asp:UpdatePanel ID="MainContainerUpdatePanel" ChildrenAsTriggers="false" UpdateMode="Conditional" runat="server">
检查您的浏览器定义文件是否已在服务器上更新,存在许多与javascript回发处理相关的问题,这些问题是由.Net错误检测IE的新版本引起的。
有许多修补程序可以更新这些文件,有关更多详细信息,请参阅Scott Hanselmann的博客:
及
如果你有多个更新面板,它会工作吗?让我们知道我也面临同样的问题。我分析了原因,找到了很多关于问题原因和解决方法的好帖子。其中一个位于: 为什么我总是收到PageRequestManagerParserErrorException? 好吧,你很可能正在做一件书中提到的事情 错误消息。以下是最常见的原因,以及为什么他们不这样做 工作: 1.调用Response.Write(): 通过直接调用
Response.Write()
,您绕过了正常的
ASP.NET控件的呈现机制。你写的东西都快用完了
直接交给客户,无需进一步处理(嗯,
主要是。这意味着UpdatePanel
无法在其
特殊格式
2.响应过滤器:
与Response.Write()类似,响应筛选器可以更改
以UpdatePanel
不知道的方式进行渲染
3.HttpModules:同样,处理方法与Response.Write()
和响应过滤器相同
4.服务器跟踪已启用:如果我要再次实施跟踪,我会采取不同的做法<代码>跟踪
是使用
Response.Write()
,这样就弄乱了我们需要的特殊格式
用于UpdatePanel
5。调用Server.Transfer():不幸的是,无法检测是否调用了Server.Transfer()
。这意味着
UpdatePanel
无法在有人呼叫时执行任何智能操作
Server.Transfer()
。发送回客户端的响应是HTML
从您传输到的页面中删除标记。因为它是HTML而不是
特殊格式,无法解析,您会得到错误。怎么办
我避免获得PageRequestManagerParserErrorException
首先,不要执行上面列表中的任何操作!以下是如何避免给定错误的匹配列表(如果可能):
调用Response.Write():在页面上放置
或类似控件,并设置其文本属性。额外的好处是
您的页面将是有效的HTML。使用Response.Write()时
通常以包含无效标记的页面结束
响应过滤器:修复方法可能只是不使用过滤器。反正也不常用。如果可能的话,在
控制级别,而不是响应级别
HttpModules:与响应过滤器相同
已启用服务器跟踪:使用其他形式的跟踪,例如写入日志文件、Windows事件日志或自定义机制
调用Server.Transfer():我不太清楚人们为什么使用Server.Transfer()
。也许这是经典的遗产
ASP。我建议对查询字符串使用Response.Redirect()
参数或跨页过帐
另一种避免解析错误的方法是执行常规回发,而不是执行异步回发。例如,如果您有
按钮,它绝对必须执行一个Server.Transfer()
,让它执行
定期回发。有多种方法可以做到这一点:
- 最简单的方法是将按钮放在任何
UpdatePanels
之外。不幸的是,页面的布局可能不允许
为了这个
- 在指向按钮的
UpdatePanel
中添加一个PostBackTrigger
。如果按钮是静态声明的,这将非常有效
通过页面上的标记
- 调用
ScriptManager.RegisterPostBackControl()
并传入有问题的按钮。这是适用于以下控件的最佳解决方案:
动态添加,例如在重复模板中添加
我认为您使用的是.net framework 4.0,windows 8的framework 4.0中存在一些问题,如果可能,您可以尝试在framework 4.5中转换您的应用程序。您可以发布您的代码示例吗?@SpiderCode我已经添加了代码ddl_程序在哪里?它是在更新面板外的下拉菜单吗?它在更新面板外是
<asp:UpdatePanel ID="MainContainerUpdatePanel" ChildrenAsTriggers="false" UpdateMode="Conditional" runat="server">
protected void Page_Load(object sender, EventArgs e) {
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(btn.Your-BUTTON-HERE');
//Further code goes here....
}