我有点困惑。 我认为当使用
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);
}
您似乎对读取 TempData 后的行为感到困惑,尤其是在重定向的情况下。通常,TempData 设计为在读取之前一直存在,并且可用于在操作之间传递数据。但是,在某些情况下,尤其是使用 RedirectToAction 时,除非显式删除,否则 TempData 在读取时不会自动清除。
在您的场景中,读取 TempData 后,理想情况下应该将其清除,但您发现仍然需要调用 TempData.Remove()。这是因为 TempData 在 RedirectToAction 中持续存在,确保数据在重定向后仍然存在,这可能解释了为什么您仍然需要手动删除它。
澄清一下:
TempData 在重定向后仍然存在,允许您在下一步操作中访问它。 如果您不需要它在重定向后在多个操作中持续存在,则必须使用 TempData.Remove() 手动删除它。 如果您更喜欢更持久的东西,例如基于会话的存储,那么 Session 可能是更好的选择,特别是当您需要跨多个请求保留数据而不用担心立即清除它时。
请告诉我这是否有助于澄清问题!