2

我有一个在返回视图之前设置 TempData 的控制器,

public ActionResult Edit(int id, int? order)
{
    Route route = new Route();
    // Do Work
    TempData["Route"] = route;
    return View(new FormViewModel(route, obj1, obj2));
}

此视图包含一个带有链接的部分视图,该链接转到另一个称为删除的操作方法,删除链接的代码是:

<%= Html.ActionLink("Delete", "Delete", new { order = item.Order })%>

Delete 操作方法的代码是:

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

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

我想知道问题是否在于这是一个获取而不是一个帖子?如果是这样,我如何从我的表单中发布到 Delete ActionMethod ?

4

3 回答 3

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。

于 2009-07-28T10:05:41.860 回答
1

TempData 不起作用的另一个因素是您的应用程序处于分布式系统下。

于 2010-10-05T04:18:17.160 回答
1

我遇到了同样的问题,结果证明我们已经SessionStateBehavior readonlyIControllerFactory. 我将其更改为default,然后出现与会话状态不可用和有关注册表项有关的后续错误...通过Asp.Net State Service在 Windows 服务中启动在我的本地计算机上解决了此错误。

TempData 要求在请求之间使用 Session State。

希望这可以帮助某人。

于 2018-05-23T20:18:48.510 回答