TempData在RedirectToAction期间不会继承

Mar*_*ark 9 .net c# razor asp.net-mvc-3

我有一个有趣的问题,TempData对象没有将值传递给另一个控制器.

我设置TempData["Enroll"]Enroll ControllerHttpPost方法的Enroll模型.然后我TempData["Enroll"]Register Controller's HttpGet方法读取对象,但是empty/ null.

我需要在3个控制器上保留所有这些数据.

有什么想法吗?

这是一个代码片段

//EnrollController.cs
[HttpPost]
public ActionResult Index(EnrollModel model)
{
   // ...
   TempData["EnrollModel"] = model;
   return RedirectToAction("Index", "Register");
}

// RegisterController.cs
public ActionResult Index(string type)
{
    RegisterModel model = new RegisterModel();

    EnrollModel enrollModel = TempData["EnrollModel"] as EnrollModel;
    model.ClientType = enrollModel.ClientType;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

she*_*nku 1

我之前就遇到过 TempData 的此类限制。我发现它充其量是不现实和零星的。

您需要考虑您想要实现的目标。如果您确实需要存储数据,实际上最好的位置是在数据库(或某种存储)中,这可能看起来有点矫枉过正,但这就是它们的目的。

另外两点:

  1. 有人可以点击您的 RegisterController Index 方法而无需先访问另一个方法,在这种情况下您的代码将会崩溃。

  2. 如果您正在进行多向导式流程,为什么不将数据以其部分状态存储在数据库中,并仅在最后一个屏幕上完成该流程?这样,无论他们在哪里停止/开始或再次拿起它,您将始终知道他们在此过程中的位置。