2013-03-29 91 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