繁体   English   中英

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

[英]Response.Redirect doesn't work in .Net 4.5

我在验证登录凭据后正在调用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事件中调用代码。 在click事件期间,我检查凭据是否正确,是否执行登录设置会话变量...并将其重定向到相应的登陆页面以用作其角色。

更多信息我将问题归结为一个基本情况。 在以下情况下,两个按钮都调用相同的函数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所没有的代码。

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

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

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

詹姆斯·沃特:

假设您使用的是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非常有效。

不知道这是否是您问题的具体答案,但它可能会以回旋的方式解决,从而节省了很多时间挠头。

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

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

Google上没有任何帮助,而在DotPeek中浏览并没有真正告诉我这个问题。

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

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

尽管已捕获(或出现了此错误),但这并不是在失去内部填充HttpResponse对象的RedirectLocation属性的机会之前。

然后,脚本模块代码尝试解析此字符串,并吹嘘它为null。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM