我正在使用ASP.NET MVC 3 Web应用程序,在用户未登录的情况下,我使用TempData存储模型对象。

流程如下:

  • 使用提交表单。
  • 代码(特殊操作过滤器)将模型添加到TempData,并重定向到登录页面。
  • 用户重定向回GET操作,该操作读取TempData并直接调用POST操作

  • 步骤3之后,我会认为TempData将被清除?

    这是代码:
    [HttpGet]
    public ActionResult Foo()
    {
        var prefilled = TempData["xxxx"] as MyModel;
        if (prefilled != null)
        {
           return Foo(prefilled);
        }
    }
    
    [HttpPost]
    [StatefulAuthorize] // handles the tempdata storage and redirect to logon page
    public ActionResult Foo(MyModel model)
    {
       // saves to db.. etc
    }
    

    我发现this article指出:
  • 如果项目已被标记为要删除,则仅在请求结束时将它们从TempData中删除。
  • 仅在读取项目时将其标记为删除。
  • 可以通过调用TempData.Keep(key)取消标记项目。
  • RedirectResult和RedirectToRouteResult始终调用TempData.Keep()。

  • 那么,通过使用TempData["xxx"]进行读取就不是“读取”了,因此应该标记它们以进行删除吗?

    最后一个让我有些担心-因为我在POST(P-R-G)之后进行了重定向。但这是无法避免的。

    有没有办法我可以说“放弃这个项目”。 TempData.Remove吗?还是我做错了吗?

    最佳答案

    在阅读后立即添加TempData.Remove进行了修复。

    对此并不十分满意。我以为TempData的全部意思是我不必要做这件事。

    也可以直接使用Session。

    关于c# - TempData未被清除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7630678/

    10-13 06:01