在我的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();
}
}
`
答案 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”。