重定向后TempData[]不工作
本文关键字:工作 TempData 重定向 | 更新日期: 2023-09-27 18:27:36
我正在尝试使用mvc TempData[]
向另一个具有重定向的控制器发送错误消息:
控制器1:
TempData["Message"] = "A password reset email has been sent to " + user.Email +
". This link in only valid for 24 hours.";
return RedirectToAction("Edit", "Users", new { id = userId });
然后,我在控制器2的构造函数中有以下助手类:
public UsersController()
{
NotificationHelper.GetViewDataNotifications(this);
}
这是助手类:
public static void GetViewDataNotifications(ControllerBase controller)
{
var message =controller.TempData["Message"] ?? "";
controller.ViewBag.Message = message;
var errorMessage = controller.TempData["ErrorMessage"] ?? "";
controller.ViewBag.ErrorMessage = errorMessage;
var infoMessage= controller.TempData["InfoMessage"] ?? "";
controller.ViewBag.InfoMessage = infoMessage;
var warningMessage = controller.TempData["WarningMessage"] ?? "";
controller.ViewBag.WarningMessage = warningMessage;
}
然后,我期望在到达Edit
Action
:时填充ViewBag
项目
public async Task<ActionResult> Edit(int? id)
{
...
return View();
}
然而,在我的助手类中,TempData似乎总是为null。我在这里错过了什么?
TempData[]
是否有一些我不知道的因素,例如它仅在同一控制器中有效或仅对单个操作有效?
当控制器的构造函数中的TempData仍然为空时,您正试图访问它。在这一点上,控制器甚至还没有完全构建,更不用说初始化了。
您应该在操作中提取TempData值。TempData在控制器构造之后但在授权和模型绑定之前至少初始化三个步骤。
本文档详细描述了控制器的生命周期。虽然您可以过度想象TempData初始化(CreateTempDataProvider
)和实际操作之间的步骤,但没有太多意义