在RedirectToAction上保留viewdata

Tho*_*ock 38 asp.net-mvc viewdata redirecttoaction

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateUser([Bind(Exclude = "Id")] User user)
{
        ...
        db.SubmitChanges();
        ViewData["info"] = "The account has been created.";
        return RedirectToAction("Index", "Admin");
}
Run Code Online (Sandbox Code Playgroud)

这不会在redirectToAction之后的viewdata中保留"info"文本.我将如何以最优雅的方式解决这个问题?

我目前的想法是将Index controlleraction中的东西放在[NonAction]中并从Index操作和CreateUser操作中调用该方法,但我觉得必须有更好的方法.

谢谢.

Mat*_*s F 72

你可以用TempData.

TempData["info"] = "The account has been created.".

TempData完全适用于这种情况.它使用Session作为存储,但在第二次响应后它不会出现.

来自MSDN:

TempDataDictionary对象的典型用途是在重定向到另一个操作方法时从操作方法传递数据.例如,action方法可能会在调用RedirectToAction方法之前在控制器的TempData属性(返回TempDataDictionary对象)中存储有关错误的信息.然后,下一个操作方法可以处理错误并呈现显示错误消息的视图.

  • 你还必须在视图中使用"TempData",而且不能只在那里继续使用ViewData,这真是太糟糕了.但它很好用,谢谢. (2认同)

eu-*_*-ne 13

ViewData如果您的数据应View在"此"请求期间可访问,请使用此选项.如果您的数据用于"下一个"请求,请使用"TempData"(例如POST-REDIRECT-GET设计模式).