.NET 4.0中的Response.Redirect

时间:2011-05-02 15:23:54

标签: c# .net asp.net

将应用程序升级到ASP.NET 4.0时

Response.Redirect()不再工作

  • Response.Redirect()用于更新面板
  • 我们使用AjaxToolKit 4.0

它给了我错误:

  

错误:Sys.WebForms.PageRequestManagerParserErrorException:从中收到的消息       服务器无法解析。此错误的常见原因是响应时间       通过调用Response.Write(),响应过滤器,HttpModules或服务器跟踪来修改       启用。       详细信息:在

附近解析时出错

9 个答案:

答案 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)

答案 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

另请参阅:https://forums.asp.net/t/1564697.aspx