簡體   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