【发布时间】:2011-12-19 04:11:50
【问题描述】:
在 ASP MVC3 中,RedirectToAction 会杀死 Session 中的数据...为什么?
考虑一下这段代码。
[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 很重要,因此我将用户留在 GET 页面而不是 POST 页面,以避免出现烦人的重新发布对话。
编辑:
当我删除它时,它位于我的控制器 [SessionState(SessionStateBehavior.ReadOnly)] 的顶部。
【问题讨论】:
-
你试过用
TempData吗? -
相比 Session 使用它有什么优势
-
如果我没记错的话 TemData 仍然是基于会话的。
标签: asp.net-mvc-3 session