4

在我的 MVC3 项目中,有很多 TempData[] 用于在操作之间传递数据。当我使用 Chrome 时,它​​非常完美。但在 IE 中,我无法获取 TempData[] 项的值。如果有人知道问题出在哪里,我该如何解决?`

public class SomeController : Controller
{
    public ActionResult SomeAction()
    {
        TempData["id"] = "someData";
        return View();

    }
}


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

    }
}

`

4

2 回答 2

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();
    }
}

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

如果您需要存储数据的时间超过一次重定向,您可以使用 Session。

于 2011-10-26T16:33:49.283 回答
0

如果您需要存储数据的时间超过一次重定向,则应使用 Keep 或 Peek 方法。

string data = TempData["id"].;
TempData.Keep("id");

或简单地使用,

string data = TempData.Peek("id").ToString();

Peek 功能有助于阅读以及建议 MVC 为后续请求维护“TempData”。

于 2016-12-13T13:34:45.727 回答