我有一个在返回 View 之前设置 TempData 的 Controller ,
public ActionResult Edit(int id, int? order)
{
Route route = new Route();
// Do Work
TempData["Route"] = route;
return View(new FormViewModel(route, obj1, obj2));
}
这个 View 包含一个带有链接的部分 View ,该链接转到另一个称为删除的操作方法,删除链接的代码是:
<%= Html.ActionLink("Delete", "Delete", new { order = item.Order })%>
删除操作方法的代码是:
public ActionResult Delete(int order)
{
Route route = (Route)TempData["Route"];
// Do Work
}
我遇到的问题是当我尝试获取 TempData["Route"];从 Delete 操作方法返回 null。
我想知道问题是不是这是 Get 而不是 Post?如果是这样,我如何从我的表单中发布到 Delete ActionMethod?
最佳答案
TempData 在两个请求之间持续存在。 Edit 操作中的 ReturnView 方法返回什么?据我所知,它不是 Controller 类中定义的标准方法。您是否在此方法中重定向(即返回 RedirectToRouteResult)?
在您的“编辑”和“删除”操作之间是否还有其他请求?例如 ajax 请求。
一般来说,使用 TempData 长时间保存某物并不是一个好主意。模式通常如下:
public ActionResult Update()
{
// When you put something into the TempData dictionary you usually
// redirect immediately to an action that will use the object stored
// inside.
TempData["something"] = "something";
return RedirectToAction("success");
}
public ActionResult Success()
{
var something = TempData["something"];
return View();
}
如果您需要更长时间地保留某些东西,您应该使用 Session。
关于asp.net-mvc - TempData 不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193129/