ASP.MVC RedirectToAction убивает сеанс передачи данных

#asp.net-mvc-3 #session

#asp.net-mvc-3 #сессия

Вопрос:

В ASP MVC3 RedirectToAction уничтожает данные в сеансе … ПОЧЕМУ?

Рассмотрим этот код.

     [HttpGet]
public ActionResult RequestTestExtract()
{
    return View(new ExtractRequestViewModel());
}



[HttpPost]
public ActionResult RequestTestExtract(ExtractRequestViewModel viewModel)
{
    var currentExtracts = (Session["Extracts"] as Dictionary<string, bool>) ?? new Dictionary<string, bool>();
    currentExtracts.Add(viewModel.fileName, false);
    Session["Extracts"] = currentExtracts;

    // typing 
    // ?Session["Extracts"] 
    // in immediate window before RedirectToAction shows a value 
            // typing it after does not
    return RedirectToAction("RequestTestExtract");
}
 

Если я возвращаю представление вместо перенаправления на действие, в сеансе все еще есть данные, которые я там сохранил.

RedirectToAction важно, поэтому я оставляю пользователя на странице ПОЛУЧЕНИЯ, а не на странице ПУБЛИКАЦИИ, чтобы избежать этого раздражающего диалога с перепостом.

Редактировать:

Это было в верхней части моего контроллера [SessionState(SessionStateBehavior.Только для чтения)] когда я удаляю это, оно ведет себя правильно.

Комментарии:

1. вы пытались использовать TempData ?

2. В чем преимущество использования этого по сравнению с сеансом

3. Если я правильно помню, TemData по-прежнему основана на сеансе.

Ответ №1:

Это было в верхней части моего контроллера [SessionState(SessionStateBehavior.Только для чтения)] когда я удаляю это, оно ведет себя правильно.