TempData不会持久化

时间:2009-07-28 10:00:29

标签: asp.net-mvc tempdata

我有一个控制器在返回视图之前设置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 })%>

删除操作方法的代码是:

public ActionResult Delete(int order)
{
    Route route = (Route)TempData["Route"];
    // Do Work
}

我遇到的问题是当我尝试获取TempData [“Route”]时;从Delete操作方法返回null。

我想知道问题是否是Get而不是Post?如果是这样,我如何从表单中删除ActionMethod?

3 个答案:

答案 0 :(得分:7)

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。

答案 1 :(得分:0)

TempData无法正常工作的另一个因素是当您的应用程序位于分布式系统下时。

答案 2 :(得分:0)

我遇到了同样的问题,事实证明我们在SessionStateBehavior的实施中已经制作了readonly IControllerFactory。我将其更改为default,然后得到与会话状态无关的后续错误以及有关注册表项的内容...此错误已在我的本地计算机上通过启动Windows服务中的Asp.Net State Service来解决。

TempData要求在请求之间使用会话状态。

希望这有助于某人。