MVC TempData 未清除

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

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

TempData
时,如果对象被读取,则应该被清除。 我不完全确定为什么我在执行 RedirectToAction 时必须直接调用
Remove()
函数,而我相信(至少)我正在清除读取 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个回答
0
投票

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

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

澄清一下:

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

高尔夫球手指南

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

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