ASP.NET MVC TempData 不清除

问题描述 投票:0回答:1

我有点困惑。我认为当使用

TempData
时,如果对象被读取,则应该被清除。我不完全确定为什么我在执行
Remove()
时必须直接调用
RedirectToAction
函数,而我相信(至少)我正在清除阅读
TempData

这是我正在使用的代码,任何帮助当然都是有帮助的。如果这是这种行为,我不妨使用 Session。

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ForgetPassword(Models.Portal.ForgetPasswordModel forgetPasswordModel)
{
       if (ModelState.IsValid)
       {
           int forgetAttemptCounter = TempData[ConstLibrary.ForgetPasswordAttempt] == null ? 1 : (int)TempData[ConstLibrary.ForgetPasswordAttempt];
           int maxCounter = 5;

           if (forgetAttemptCounter <= maxCounter)
           {
               bool useEmail = Helper.Validation.IsValiEmailAddress(forgetPasswordModel.AccountName);

               if (forgetPasswordModel.ForgetPasswordReset == Models.Portal.ForgetPasswordReset.Success)
               {
                   TempData.Remove(ConstLibrary.ForgetPasswordAttempt);
                   return RedirectToAction("ResetPassword", "Portal", new Models.Portal.ResetPasswordModel());
               }
               else
               {
                   TempData[ConstLibrary.ForgetPasswordAttempt] = (int)TempData[ConstLibrary.ForgetPasswordAttempt] + 1;
               }
           }
           else
           {
               TempData[ConstLibrary.ForgetPasswordAttempt] = maxCounter + 1;
               ViewBag.ShowForgetPasswordError = true;
               return View(forgetPasswordModel);
           }
       }

       ViewBag.ShowForgetPasswordError = true;

       return View(forgetPasswordModel);
}
asp.net-mvc
1个回答
-1
投票

您似乎对读取 TempData 后的行为感到困惑,尤其是在重定向的情况下。通常,TempData 设计为在读取之前一直保留,并且可用于在操作之间传递数据。但是,在某些情况下,尤其是使用 RedirectToAction 时,除非显式删除,否则 TempData 在读取时不会自动清除。

在您的场景中,读取 TempData 后,理想情况下应该将其清除,但您发现仍然需要调用 TempData.Remove()。这是因为 TempData 在 RedirectToAction 中持续存在,确保数据在重定向后仍然存在,这可能解释了为什么您仍然需要手动删除它。

澄清一下:

TempData 在重定向后仍然存在,允许您在下一步操作中访问它。 如果您不需要它在重定向后在多个操作中持续存在,则必须使用 TempData.Remove() 手动删除它。 如果您更喜欢更持久的东西,例如基于会话的存储,那么 Session 可能是更好的选择,特别是当您需要跨多个请求保留数据而不用担心立即清除它时。

高尔夫球手指南

请告诉我这是否有助于澄清问题!

© www.soinside.com 2019 - 2024. All rights reserved.