2013-03-29 2 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. Это метод веб-форм. ActionResults должны возвращать действия для работы. –

+0

даже в webforms, Response.Redirect не останавливает выполнение, весь код за ним все равно будет выполнен –

ответ

4

Все Response.Redirect() делает (на самом деле) устанавливается заголовок location= ответа на указанный URI и устанавливает статус НТТР 302 Found. Он также пишет немного заглушки HTML в ответ со ссылкой на новый URI, но это просто украшение.

Если вы не используете перегрузку, которая позволяет указать, следует ли продолжить обработку с помощью флага bool, обработка продолжается. Если этот флаг bool равен true, обработка ответа завершается прерыванием потока, обрабатывающего запрос, бросая ThreadAbortException в качестве побочного эффекта.

+0

Спасибо всем! удивительные ответы. Я должен был взглянуть на него с отражателем, и я бы это знал. Я перешел в мышление «webforms» и забыл подумать о том, что на самом деле происходит. –

8

Необходимо, чтобы return. Это функция. В вашем случае вы можете использовать Redirect:

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

, а затем сделать actiontype return void? –

+0

Nah оставьте это как возвращение ActionResult – mattytommo

Смежные вопросы