0

我在验证登录凭据后调用 response.redirect,这在 .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 事件中调用。在单击事件期间,我检查凭据是否正确,如果它们是,我执行登录设置会话变量......并将它们重定向到其角色的适当登录页面。

更多信息 我将我的问题归结为一个基本场景。在以下场景中,两个按钮调用相同的函数 btnTemp_Click,该函数调用 Response.redirect。在 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:button不再起作用

如果我创建了一个全新的 Web 应用程序,其中除了这两个按钮之外什么都没有,它对两者都适用。所以我必须有一些代码在 onserverclick 命中但 onclick 没有命中的地方做某事。

4

2 回答 2

0

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

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

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

詹姆斯写道:

假设您使用的是 UpdatePanel,请将以下 ScriptModule 添加到您的 web.config:

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

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

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

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

于 2013-11-01T16:44:06.003 回答
0

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

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

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

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

然后我看到在 VS 2010 中可以实际加载 .NET Framework 代码的符号,所以我这样做了(工具->选项->启用 .NET Framework 源步进)。

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

尽管这已被捕获(或者看起来如此),但这并不是在它失去内部填充 HttpResponse 对象的 RedirectLocation 属性的机会之前。

然后脚本模块代码尝试解析这个字符串,并吹嘘它是空的。

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

于 2014-01-08T09:54:53.133 回答