【发布时间】:2014-10-22 13:34:05
【问题描述】:
我正在尝试使用 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 });
然后,我在 Controller 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 似乎总是为空。我在这里错过了什么?
TempData[] 是否有一些我不知道的因素,例如它仅在同一控制器中有效或仅对单个操作有效?
【问题讨论】:
-
不要调用构造函数中的方法。那时,控制器甚至还没有完全构建。 TempData 等属性尚未加载。
-
那么我应该在需要的操作中调用我的助手吗?
-
@Zapnologica 是的,没错。
-
好的,我会尝试,我这样做是为了不必在每个操作方法中复制代码。
-
无论如何都不需要这个助手。只需在您的视图中直接访问
TempData。无需先设置ViewBag中的值。您所做的只是将数据从一个动态存储位置移动到另一个位置。
标签: c# asp.net-mvc asp.net-mvc-5 viewbag tempdata