【问题标题】:why TempData[] doesnt work with IE为什么 TempData[] 不适用于 IE
【发布时间】:2011-10-26 11:29:21
【问题描述】:

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

    }
}

`

【问题讨论】:

  • 这不应该是浏览器问题。这仅在server 上呈现,您应该特别考虑您的View。随时提供您的观点。这可能有助于人们解决问题
  • TempData 仅在下一个请求中持续存在,因此请使用 fiddler 或其他一些 http 分析器查看来自 chrome 和 IE 的请求之间是否存在差异。
  • @Munim 谢谢,你说得对,这不应该是浏览器问题,而是发生了。顺便说一句,在视图中我不使用任何与 tempdata 相关的东西。从一个动作到另一个动作,页面都带有 所以这就是为什么我找不到合理的解释。
  • @Xhalent 谢谢,我知道 TempData 仅用于下一个请求。但就我而言,即使它是否是下一个请求,我在 IE 中也有问题,但在 Chrome 中令人惊讶的是,即使在十几个请求之后它也能正常工作。它非常奇怪。
  • 我同意@Xhalent,看看 Fiddler 是否有任何来自 IE 的不需要的请求。

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


【解决方案1】:

您永远不应该从将某些内容存储到 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。

【讨论】:

    【解决方案2】:

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

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

    或者简单地使用,

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多