2013-03-29 90 views
5

我有下面的代碼塊。我很困惑如何代碼可以通過代碼如何通過response.redirect?

Response.Redirect("~..") 

確實如此。我認爲任何線路都會自動執行。我在這裏錯過了一些基本的東西嗎?我發現調試器實際上正在執行下一行。

public ActionResult Index() 
    { 
     Response.Redirect("~/Default.aspx", true); 

     string year = 
      Utils.ConvertCodeCampYearToActualYear(
       Utils.GetCurrentCodeCampYear().ToString(CultureInfo.InvariantCulture)); 
     var viewModel = GetViewModel(year); 
     return View(viewModel); 
    } 
+1

我認爲你對MVC框架的功能有誤解。這是一種webforms方法。 ActionResults必須返回Actions來運行。 –

+0

即使在webforms中,Response.Redirect不會停止執行,所有超出的代碼仍然會被執行 –

回答

4

所有Response.Redirect()確實(真的)設置location=響應頭到指定的URI和設置HTTP狀態302 Found。它還在響應中寫入一個小的stub HTML,並鏈接到新的URI,但這僅僅是一種裝飾。

除非您使用允許指定是否應通過bool標誌繼續處理的過載,否則處理將繼續。如果bool標誌爲真,則通過中止處理該請求的線程來終止響應處理,從而引起ThreadAbortException的副作用。

+0

謝謝大家!真棒的答案。我應該用反光鏡看過它,我會知道的。我重新陷入了「網絡形式」的思維中,忘記了思考發生了什麼。 –

8

您需要return它。這是一個功能。你的情況,你可以使用Redirect

return Redirect("~/Default.aspx"); 
+0

,然後使返回void的actiontype? –

+0

Nah讓它返回一個ActionResult – mattytommo