Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 为什么TempData[]不能与IE一起工作_Asp.net Mvc 3_Internet Explorer_Google Chrome_Razor_Tempdata - Fatal编程技术网

Asp.net mvc 3 为什么TempData[]不能与IE一起工作

Asp.net mvc 3 为什么TempData[]不能与IE一起工作,asp.net-mvc-3,internet-explorer,google-chrome,razor,tempdata,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();

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

    }
}

`

决不能从将某些内容存储到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请求期间丢失


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

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

string data = TempData["id"].;
TempData.Keep("id");
或者干脆用,

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

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

这不应该是浏览器问题。这仅在
服务器上呈现
,您应该特别考虑
视图
。请随时提供您的看法。这可能有助于人们了解问题TempData只在下一个请求中才会持续,因此请使用fiddler或其他http探查器查看来自chrome和IE的请求之间是否存在差异。@Munim谢谢,你说得对,这不应该是浏览器问题,顺便说一下,在视图中,不要使用任何与tempdata相关的内容。从一个动作到另一个动作,页面一直在进行,这就是为什么ı找不到合理的解释。@X谢谢,我只知道TempData是为了下一个请求。但在我的情况下,即使它是非常下一个请求或不是我有一个问题,在IE然而令人惊讶的是,在Chrome的工作,即使在一打请求。这非常奇怪。我同意@Xhalent,看看Fiddler,任何不需要的请求都是从IE执行的。