我有一个在返回视图之前设置TempData的控制器,
public ActionResult Edit(int id, int? order)
{
Route route = new Route();
// Do Work
TempData["Route"] = route;
return View(new FormViewModel(route, obj1, obj2));
}这个视图包含一个带有链接的局部视图,该链接转到另一个名为delete的操作方法,删除链接的代码是:
<%= Html.ActionLink("Delete", "Delete", new { order = item.Order })%>Delete操作方法的代码为:
public ActionResult Delete(int order)
{
Route route = (Route)TempData["Route"];
// Do Work
}我遇到的问题是,当我试图从删除操作方法中获取TempData“Route”时,返回null。
我想知道问题是不是这是一个Get而不是一个帖子?如果是这样的话,我如何从我的表单中发布到删除ActionMethod?
发布于 2009-07-28 10:05:42
TempData在两个请求之间保持不变。编辑操作中的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。
发布于 2010-10-05 12:18:17
TempData不工作的另一个因素是当你的应用程序在分布式系统下时。
发布于 2018-05-24 04:18:49
我也遇到了同样的问题,结果是我们在IControllerFactory的一个实现中创建了我们的SessionStateBehavior readonly。我将其更改为default,然后得到一个与会话状态不可用相关的后续错误,以及有关注册表项的某些信息……在我的本地计算机上,通过启动Windows Services中的Asp.Net State Service解决了此错误。
TempData要求在请求之间使用会话状态。
希望这对某些人有帮助。
https://stackoverflow.com/questions/1193129
复制相似问题