Response.Redirect在.Net 4.5中不起作用

本文关键字:不起作用 Net Redirect Response | 更新日期: 2023-09-27 18:37:16

我在验证登录凭据后调用响应.重定向这一切都在.NET Framework 3.5中运行良好但是当我升级到.net 4.5时什么也没发生。它保持在同一页面上。

我尝试了各种排列

System.Web.HttpContext.Current.Response.Redirect("/");
System.Web.HttpContext.Current.Response.Redirect("/", false);
System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();

似乎什么都不起作用我已经在它周围放了一个尝试捕获,并且在使用 false 时没有任何异常。

正在从 asp:button onClick 事件调用代码。 在单击事件期间,我检查凭据是否正确,如果是 我执行登录设置会话变量...并将他们重定向到适合其角色的相应登录页面。

更多信息我已经将我的问题归结为一个基本场景。在以下方案中,两个按钮调用调用 Response.redirect 的相同函数btnTemp_Click。 在asp:button的情况下,它在HTML5按钮的情况下不起作用。在这两种情况下,都会执行 response.redirect 上的断点。

<asp:Button ID="btnTemp" Text="Test Redirect" runat="server" OnClick="btnTemp_Click" />
<button id="btnTmp2" runat="server" onserverclick="btnTemp_Click" >button to Redirect</button>
protected void btnTemp_Click(object sender, EventArgs e)
{
        HttpContext.Current.Response.Redirect("http://www.google.com", false);
}

单击按钮后其他奇怪的事情 asp:按钮不再工作

如果我创建一个全新的 Web 应用程序并且除了这两个按钮之外什么都没有,它对两者都有效。所以我必须有一些代码在某个地方做一些服务器点击但点击没有的地方做的事情。

Response.Redirect在.Net 4.5中不起作用

在这里使用詹姆斯·约翰逊的答案解决了它

问题基本上是,如果您在更新面板中并且控件未专门注册为回发触发器,那么您正在尝试重定向异步回发。

因此,必须将控件显式注册为回发触发器

詹姆斯写道:

假设您使用的是 UpdatePanel,请添加以下内容 脚本模块到您的 web.config:

<httpModules>
   <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules> 

另一个选项是将执行重定向的控件注册为回发控件。使用更新面板,您可以做到 这是通过添加一个PostBackTrigger来实现的。您还可以使用脚本管理器:

ScriptManager.GetCurrent(Page).RegisterPostBackControl(Button1);

我无法让第一个解决方案工作(至少在调试模式下)第二个解决方案在页面加载中调用RegisterPostBackControl效果很好。

不知道这是否是你问题的具体答案,但它可能会以迂回的方式解决它,并为某人节省大量挠头的时间。

我在MS Ajax弹出窗口中遇到了NullReferenceException的问题 - 具体来说,在弹出窗口上单击关闭应该返回到服务器,并且服务器端代码重定向到另一个页面,但是它给出了此错误。

查看堆栈跟踪,我可以看到异常本身是在 ScriptModule.HttpResponse_Redirecting 方法中引发的。

谷歌上没有任何帮助,查看DotPeek并没有真正告诉我这个问题。

然后我看到在VS 2010更高版本中可以实际加载.NET Framework代码的符号,所以我这样做了(Tools->Options->Enable .NET Framework Source Stepping)。

事实证明,原因是按钮单击被视为回调(而不是回发),Response.Reirect不喜欢这样(即他们认为当Page.IsCallback为真时不应该调用Response.Redirect),并在内部抛出异常。

尽管这被捕获了(或者看起来是这样),但这并没有失去在内部填充 HttpResponse 对象的 RedirectLocation 属性的机会。

然后,脚本模块代码尝试解析此字符串,并指出它是 null。

因此,对我有用的解决方法是在调用重定向之前显式设置 HttpResponse 对象的 RedirectLocation 属性。诚然,这不是一个特别优雅的解决方案,但是,让我们面对现实吧,MS Ajax也不是(WebForms也不是真的为了这件事;)!