Response.Redirect()
不再工作
Response.Redirect()
用于更新面板AjaxToolKit 4.0
它给了我错误:
错误:Sys.WebForms.PageRequestManagerParserErrorException:从中收到的消息 服务器无法解析。此错误的常见原因是响应时间 通过调用Response.Write(),响应过滤器,HttpModules或服务器跟踪来修改 启用。 详细信息:在
附近解析时出错
答案 0 :(得分:3)
你必须这样做
string redirectURL=(a proper url goes here)
string script = "window.location='" + redirectURL + "';";
ScriptManager.RegisterStartupScript(this, typeof(Page), "RedirectTo", script, true);
答案 1 :(得分:2)
尝试将True
作为第二个参数传递:
Response.Redirect("http://...", true);
答案 2 :(得分:2)
UpdatePanel不支持assese.redirect异步。您应该完全回发页面或避免使用它。
http://forums.asp.net/t/1392827.aspx
How to fix error: The message received from the server could not be parsed
答案 3 :(得分:2)
有同样的问题......您需要使用专为4.0构建的最新版本替换您的AjaxControlToolkit版本。这是一个替代品,所以它应该影响其他任何事情。See Ajaxcontroltoolkit on codeplex
答案 4 :(得分:2)
我们遇到了同样的问题。通过使用PostBackTrigger控件解决
<Triggers>
<asp:PostBackTrigger ControlID="UploadButton" />
</Triggers>
http://msdn.microsoft.com/en-us/library/system.web.ui.postbacktrigger.aspx
答案 5 :(得分:1)
您正尝试使用异步请求重定向到另一个页面。
您可以重载Response.Redirect
函数并将其设置为false。
Response.Redirect("URL",false);
将其设置为false,它将终止您当前的请求并转到下一个请求。
我100%确定它会对你有用。
答案 6 :(得分:1)
你应该尝试这样做:
Response.Redirect("URL", false);
HttpContext.Current.ApplicationInstance.CompleteRequest();
您将被重定向,不会抛出任何错误。
答案 7 :(得分:1)
我一直窒息这个问题整整一天没有前进。 如果调用者在updatePanel之外,则更新面板AsyncPostBackTrigger的内容。如果要重定向,请将其添加为PostBackTrigger。 updatepanel上的两件事情都使用:
<asp:UpdatePanel ID="myUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:LinkButton ID="link" runat="server" OnClick="link_Click"/>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="link" />
</Triggers>
</asp:UpdatePanel>
我的问题与由于列表视图而在自定义控件内以动态生成的控件有关。
解决方案:
ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(myRedirectButton);
在我的情况下,我在项目数据绑定上使用listview,所以我使用了控件:
Control myRedirectButton = ListViewDataItem.GetControl("controlId")
请记住Async与非Async之间的差异。这是我直到很远才注意到的主要观点。
答案 8 :(得分:0)
这也发生在我们从.Net 3.5迁移到.Net 4.0的一个项目中
仅在启用压缩时出现此问题。我们在Title
文件中有一个自定义的响应过滤器,以便在浏览器支持时将gzip压缩应用于每个响应。
解决方案是在AJAX(更新面板)发出请求时排除该过滤器的添加。因为请求包含一个Global.asax.cs
头,所以很容易区分。这可以通过将逻辑包装在if中来实现:
X-MicrosoftAjax: Delta=true