asp.net-mvc - TempData 不持久

标签 asp.net-mvc tempdata

我有一个在返回 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/

相关文章:

c# - 在 ASP.NET MVC6 中设置 View 引擎以在单元测试中使用 AspNet.TestHost.TestServer

asp.net-mvc - asp.net mvc 和网络农场

asp.net - 在nodejs中模拟ASP.NET TempData

redirect - 添加列表并重定向到另一个 View 时,Asp.net 核心 TempData 给出 500 错误

c# - 可以使用 WCF + DTO + Automapper 吗?

asp.net - 如何为 EF6 命名多对多表?是否需要为此添加特殊映射?

c# - MVC3 中的 CSS 背景图像——续

c# - 错误激活 int 没有匹配的绑定(bind)是 av

javascript - MVC razor 如何在客户端管理 TempData 值?