为什么 TempData[] 不适用于 IE

ser*_*ads 4 internet-explorer google-chrome tempdata razor asp.net-mvc-3

\xc4\xb0n 我的 MVC3 项目,有大量的 TempData[] 用于在操作之间传递数据。当我使用 Chrome 时,它​​的效果非常完美。但在 IE 中我无法获取 TempData[] 项的值。如果有人知道问题是什么以及我该如何解决它?

\n\n
public class SomeController : Controller\n{\n    public ActionResult SomeAction()\n    {\n        TempData["id"] = "someData";\n        return View();\n\n    }\n}\n\n\npublic class AnotherController : Controller\n{\n    public ActionResult AnotherAction()\n    {\n        string data = Convert.ToString(TempData["id"]);\n        return View();\n\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

`

\n

Dar*_*rov 5

您永远不应该从将某些内容存储到 TempData 的控制器操作返回视图。您应该立即重定向到应该使用它的控制器操作:

public class SomeController : Controller
{
    public ActionResult SomeAction()
    {
        TempData["id"] = "someData";
        return Redirect("AnotherAction", "Another");
    }
}


public class AnotherController : Controller
{
    public ActionResult AnotherAction()
    {
        string data = Convert.ToString(TempData["id"]);
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

原因是 TempData 仅在单个附加请求时存在。因此,例如,如果在视图内向某个控制器操作(无论是哪个)发送 AJAX 请求,然后在此视图中有一个指向目标操作的链接,则当用户重定向到此目标操作时,TempData 将不再存在因为它在之前完成的 AJAX 请求期间丢失了。

如果您需要存储数据的时间长于单个重定向,则可以使用 Session。