【发布时间】:2013-10-29 17:39:05
【问题描述】:
我在验证登录凭据后调用 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);
}
点击 button 后出现的其他奇怪的 asp:button 不再起作用
如果我创建了一个全新的 Web 应用程序,其中除了这两个按钮之外什么都没有,它对两者都适用。所以我必须有一些代码在 onserverclick 命中但 onclick 没有命中的地方做某事。
【问题讨论】:
-
您能否提供有关此代码上下文的更多详细信息?它是用于 Web 窗体、MVC 还是其他东西?如果是 Web 表单,您在哪个事件中使用它(Load、Pre Init、LoadComplete 等)?不知道更多,很难回答。
-
Response.Redirect总是抛出异常。这就是为什么您认为您需要try/catch。它没有与false一起抛出的原因是因为第二个参数决定了线程是否被中止。现在,当你说它不起作用时,这就是可疑的部分。 你怎么知道它不起作用? -
尝试将
Response.Redirect("/")更改为Response.Redirect("~/") -
Ryan 我在 asp:button onClick 事件中调用它。
-
会不会有东西干扰了重定向?尝试创建一个新的 ASP.NET 4.5 项目,其中包含一个重定向到 Google 或其他内容的空白页面。