首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TempData不持久

TempData不持久
EN

Stack Overflow用户
提问于 2009-07-28 10:00:29
回答 3查看 9.6K关注 0票数 2

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

代码语言:javascript
复制
public ActionResult Edit(int id, int? order)
{
    Route route = new Route();
    // Do Work
    TempData["Route"] = route;
    return View(new FormViewModel(route, obj1, obj2));
}

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

代码语言:javascript
复制
<%= Html.ActionLink("Delete", "Delete", new { order = item.Order })%>

Delete操作方法的代码为:

代码语言:javascript
复制
public ActionResult Delete(int order)
{
    Route route = (Route)TempData["Route"];
    // Do Work
}

我遇到的问题是,当我试图从删除操作方法中获取TempData“Route”时,返回null。

我想知道问题是不是这是一个Get而不是一个帖子?如果是这样的话,我如何从我的表单中发布到删除ActionMethod?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-28 10:05:42

TempData在两个请求之间保持不变。编辑操作中的ReturnView方法返回什么?据我所知,它不是在Controller类中定义的标准方法。你是否在这个方法中重定向(即返回一个RedirectToRouteResult)?

另外,在编辑和删除操作之间还可能发生其他请求吗?例如ajax请求。

一般来说,使用TempData长时间持久化并不是一个好主意。模式通常如下所示:

代码语言:javascript
复制
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。

票数 7
EN

Stack Overflow用户

发布于 2010-10-05 12:18:17

TempData不工作的另一个因素是当你的应用程序在分布式系统下时。

票数 1
EN

Stack Overflow用户

发布于 2018-05-24 04:18:49

我也遇到了同样的问题,结果是我们在IControllerFactory的一个实现中创建了我们的SessionStateBehavior readonly。我将其更改为default,然后得到一个与会话状态不可用相关的后续错误,以及有关注册表项的某些信息……在我的本地计算机上,通过启动Windows Services中的Asp.Net State Service解决了此错误。

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

希望这对某些人有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1193129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档