【问题标题】:TempData not persistingTempData 不持久
【发布时间】:2009-07-28 10:00:28
【问题描述】:

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

删除操作方法的代码是:

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

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

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

【问题讨论】:

    标签: asp.net-mvc tempdata


    【解决方案1】:

    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。

    【讨论】:

    • 我已经编辑了帖子,这是一个错字,应该是 return View() 而不是 returnview。
    • 可能导致 TempData 无效的 ajax 请求怎么样?
    • 已修复,是 SessionState 的问题。通过对 web.config 的一些更改对其进行整理。
    • 我收回它,我在 SessionState 中添加了 SessionState mode="InProc" 但它把我漂亮的 URL 从 localhost:4402/Route/Edit/1 更改为:localhost:4402/(S(e23msb30lb3u4vzbhlkhkajx))/Route/Edit/1 有什么办法吗?我没有任何使 TempData 无效的 AJAX 请求。
    • 您在 url 中看到的“令牌”是当您禁用 cookie 以进行会话跟踪时。只需在 sessionState 中设置 cookieless="false" ,您的网址就会再次变好。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多