如果使用多个动作,使用TempData.Keep()是否会保存所有先前的TempData?

REM*_*ESQ 2 asp.net-mvc-3 asp.net-mvc-4

我昨天问了这个问题.

我相信我已经找到了使用TempData的答案.我的新问题是,是否通过动作(如向导步骤)沿着TempData进行串行将"保留"所有先前的TempData,或者如果我必须在每个动作中继续重新声明以"保持"它.

因此,如果TempData Step1具有字段1,2和3,然后Step2具有字段4,5和6,那么将在步骤3中保留1到6:

[HttpPost]
public ActionResult Step1 (Step1Model model)
{
    if (ModelState.IsValid)
    {
        TempData["Step1"] = model;
        return RedirectToAction("Step2")
    }
    return View(model);
}

public ActionResult Step2 (Step2Model model)
{
    Step1Model step1 = (Step1Model)TempData["Step1"]
    if (step1 == null)
    {
        return RedirectToAction("Step1")
    }
    TempData.Keep("Step1")
    if (ModelState.IsValid)
    {
        TempData["Step2"] = model;
        return RedirectToAction("Step3")
    }
    return View(model);
}
public ActionResult Step3()
{
    TempData.Keep() // is this keeping Step1 and Step2?
    return View();
}
Run Code Online (Sandbox Code Playgroud)

以上内容过于简单.最终,我可能有6个或7个步骤,想知道是否有第三步:当我在第二步(即没有重新声明使用第一步和第二步的:在一个新的第三步,我会写Step1Model step1...;Step2Model step2...;

Sat*_*pal 5

TempData项目仅在读取后标记为删除.当密钥标记为保留时,密钥将保留用于下一个请求.根据MSDN TempData.Keep()标记字典中的所有键以保留.

只需TempData.Keep()在重定向之前调用

  • @RosdiKasim,评论不是一个提出新问题的地方.但是,让我们专注于你的问题`它会自己到期吗?`.答案是"是" (3认同)