为什么TempData []不适用于IE

时间:2011-10-26 11:29:22

标签: asp.net-mvc-3 internet-explorer google-chrome razor tempdata

在我的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();

    }
}

`

2 个答案:

答案 0 :(得分:4)

您永远不应该从存储内容的控制器操作返回一个视图到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。

答案 1 :(得分:0)

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

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

或只是使用,

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

Peek函数有助于读取和建议MVC为后续请求维护“TempData”。