2013-10-29 42 views
0

我在驗證登錄憑據後調用response.redirect 這一切在.net framework 3.5 中正常工作,但是當我升級到.net 4.5時 沒有任何反應。它保持在同一頁面上。Response.Redirect在.Net 4.5中不起作用

我已經試過各種排列

System.Web.HttpContext.Current.Response.Redirect("/"); 
System.Web.HttpContext.Current.Response.Redirect("/", false); 
System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest(); 

似乎沒有任何工作 我已經把一個嘗試捕捉周圍和使用假時,我沒有得到任何的異常。

該代碼被調用了一個asp:button onClick事件。在點擊事件過程中,我檢查憑據是否正確,如果他們是我執行登錄設置會話變量...並將其重定向到相應的登錄頁面以查看其角色。

更多信息 我把我的問題歸結爲基本情況。在以下情況中,兩個按鈕都會調用調用Response.redirect的相同函數btnTemp_Click。在asp:按鈕的情況下,它在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:按鈕不再起作用

如果我創建了一個全新的Web應用程序,並沒有任何在它不過這兩個按鈕它的工作原理對彼此而言。所以我必須有一些代碼在onserverclick命中的地方做某事,但onclick不會。

+1

你能給這個代碼的情況下更多的細節?它被用於Web窗體,MVC或其他東西嗎?如果Web窗體,你在(Load,Pre Init,LoadComplete等)中使用了哪個事件?不知道更多,這將很難回答。 – Ryan

+3

'Response.Redirect'總是拋出一個異常。這就是爲什麼你認爲你需要一個'try/catch'。它不會拋出'false'的原因是因爲第二個參數決定線程是否中止。現在,當你說它不起作用時,那是可疑部分。 **你怎麼知道*它不工作?** –

+0

嘗試改變'Response.Redirect(「/」)''Response.Redirect(「〜/」)' – th1rdey3

回答

0

解決它採用詹姆斯 - 約翰遜的回答here

的問題基本上是如果你是一個更新面板內,控制沒有具體登記爲觸發回傳,那麼你正試圖重定向異步回發。

所以你必須明確地註冊控件的回發觸發

詹姆斯寫道:

假設你使用一個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。

0

不知道這是否是問題的具體答案,但它可能會以迂迴的方式解決問題,並且可以節省大量時間。

我在MS Ajax彈出窗口中遇到了NullReferenceException問題 - 具體地說,單擊關閉彈出窗口應該返回到服務器,並且服務器端代碼重定向到另一個頁面,但它給出了此錯誤。

看着堆棧跟蹤,我可以看到,除了本身在ScriptModule.HttpResponse_Redirecting方法被拋出。

谷歌什麼都不會有幫助,看看DotPeek並沒有真正告訴我這個問題。

然後我看到它在VS 2010中向上實際加載.NET Framework的代碼符號是可能的,所以我這樣做(工具 - >選項 - >啓用.NET Framework的源步進)。

原來,原因是按鈕點擊被視爲回調(而不是回發),Response.Reirect不喜歡這樣(即他們不認爲Response.Redirect應該被調用時Page.IsCallback爲真),並在內部拋出異常。

雖然這被抓獲(左右就出現),這是不是之前就失去了機會,在內部填充HttpResponse對象的RedirectLocation財產。

腳本模塊代碼,然後試圖解析這個字符串,並且吹的事實,這是零。

這爲我工作因此被明確地設置HttpResponse對象的RedirectLocation財產,立即在調用重定向解決方法。誠然,這不是一個特別優雅的解決方案,但是,讓我們面對它,也不是MS阿賈克斯(也不是真正的WebForms爲此事;!))

+0

感謝您的回覆。我想我跟着你,但你有一些代碼要顯示嗎?當您明確設置RedirectLocation時,將按鈕單擊爲回發? – Leo

相關問題