Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 响应。重定向不';我不能在.NET4.5中工作_C#_Asp.net - Fatal编程技术网

C# 响应。重定向不';我不能在.NET4.5中工作

C# 响应。重定向不';我不能在.NET4.5中工作,c#,asp.net,C#,Asp.net,验证登录凭据后,我正在调用response.redirect 这一切在.NETFramework3.5中都可以正常工作 但是当我升级到.NET4.5时 什么也没发生。它保持在同一页上 我试过各种排列 System.Web.HttpContext.Current.Response.Redirect("/"); System.Web.HttpContext.Current.Response.Redirect("/", false); System.Web.HttpContext.Current.Ap

验证登录凭据后,我正在调用response.redirect 这一切在.NETFramework3.5中都可以正常工作 但是当我升级到.NET4.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\U单击调用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);
}

按钮重定向
受保护的无效btnTemp\u单击(对象发送方,事件参数e)
{
HttpContext.Current.Response.Redirect(“http://www.google.com“,假);
}
点击按钮后,asp:按钮不再工作


如果我创建了一个全新的Web应用程序,其中除了这两个按钮之外没有任何内容,那么这两个按钮都适用。因此,我必须有一些代码在某个地方执行某些操作,onserverclick可以命中,而onclick不能。使用James Johnson的答案解决了这个问题

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

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

詹姆斯写道:

假设您使用的是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> 
我无法使第一个解决方案工作(至少在调试模式下)
第二种解决方案在页面加载中调用RegisterPostBackControl非常有效。

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

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

查看堆栈跟踪,我可以看到异常本身正在ScriptModule.HttpResponse_重定向方法中抛出

谷歌上的任何东西都帮不上忙,而查看DotPeek并没有真正告诉我这个问题

然后我发现在VS2010中,实际上可以加载.NETFramework代码的符号,所以我这样做了(工具->选项->启用.NETFramework源代码)

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

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

然后,脚本模块代码试图解析这个字符串,却发现它为null


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

您能提供更多关于此代码上下文的详细信息吗?它是在Web表单、MVC还是其他方面使用的?如果是Web表单,您在哪个事件中使用它(Load、Pre-Init、LoadComplete等)?如果不知道更多,就很难回答。
Response.Redirect
总是抛出异常。这就是为什么你认为你需要一个
try/catch
。它不抛出false的原因是第二个参数决定线程是否中止。现在,当你说它不起作用时,那就是可疑的部分。您如何知道它不起作用?请尝试更改
响应。重定向(“/”
响应。重定向(“~/”
Ryan我在asp:button onClick事件中调用它。重定向是否会受到干扰?尝试创建一个新的ASP.NET 4.5项目,其中包含一个空白页面,可重定向到Google或其他内容。感谢您的回复。我想我跟踪了你,但是你有代码要显示吗?当您显式设置重定向位置时,是否将按钮单击视为回发?
ScriptManager.GetCurrent(Page).RegisterPostBackControl(Button1);