.NET 4.0中的Response.Redirect
将应用程序升级到ASP.NET 4.0时, Response.Redirect()
不再起作用
-
Response.Redirect()
在Update面板中使用 - 我们使用
AjaxToolKit 4.0
它给了我错误:
错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息。 此错误的常见原因是通过调用Response.Write(),响应filter,HttpModules或服务器跟踪来修改响应。 详细信息:解析附近时出错
UpdatePanel不支持assese.redirect异步。 您应该完全回发页面或避免使用它。
http://forums.asp.net/t/1392827.aspx
如何修复错误:无法解析从服务器收到的消息
你必须这样做
string redirectURL=(a proper url goes here) string script = "window.location='" + redirectURL + "';"; ScriptManager.RegisterStartupScript(this, typeof(Page), "RedirectTo", script, true);
尝试传递True
作为第二个参数,如下所示:
Response.Redirect("http://...", true);
有同样的问题……您需要使用专为4.0构建的最新版本替换您的AjaxControlToolkit版本。 这是一个替代品,所以它应该影响其他任何东西。 请参阅codeplex上的Ajaxcontroltoolkit
我们遇到了同样的问题。 通过使用PostBackTrigger控件解决
http://msdn.microsoft.com/en-us/library/system.web.ui.postbacktrigger.aspx
你应该尝试这样做:
Response.Redirect("URL", false); HttpContext.Current.ApplicationInstance.CompleteRequest();
您将被重定向,不会抛出任何错误。
我一直在唠叨这个问题整整一天没有前进。 如果调用者在updatePanel之外,则更新面板AsyncPostBackTrigger的内容。 如果要重定向,请将其添加为PostBackTrigger。 updatepanel上的两件事情都使用:
我的问题与由于列表视图在自定义控件内以动态生成的控件有关。
解决方案:
ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(myRedirectButton);
在我的情况下,我在项目数据绑定上使用listview,所以我得到了控件使用:
Control myRedirectButton = ListViewDataItem.GetControl("controlId")
请记住Async与非Async之间的差异。 这是我直到很远才注意到它的要点。
您正尝试使用异步请求重定向到另一个页面。
您可以重载Response.Redirect
函数并将其设置为false。
Response.Redirect("URL",false);
通过将其设置为false,它将终止您当前的请求并转到下一个请求。
我百分百肯定它会对你有用。
这也发生在我们从.Net 3.5迁移到.Net 4.0的一个项目中
仅在启用压缩时才会出现此问题。 我们在Global.asax.cs
文件中有一个自定义响应filter,以便在浏览器支持时对每个响应应用gzip压缩。
解决方案是在AJAX(更新面板)发出请求时排除添加该filter。 这很容易区分,因为请求包含X-MicrosoftAjax: Delta=true
标头。 这可以通过将逻辑包装在if中来实现:
if (Request.Headers["X-MicrosoftAjax"] != "Delta=true") { // Compression logic here }
另见: https : //forums.asp.net/t/1564697.aspx