asp.net MVC:TempData,一旦读取,是否需要重新保存?

asp.net MVC:TempData,一旦读取,是否需要重新保存?,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我正在使用TempData存储网站的推荐人,并通过jquery发出ajax调用以发送电子邮件。。。我使用tempdata恢复原始的referer URL 它在第一次读取时效果很好,但第二次读取时它是空的。。。。我想这是故意的。。。所以我决定尝试viewdata,但它是存储的,但在ajax调用中通过控制器读取时,它是空的 有人知道我的选择是什么吗 下面是两行的语法 TempData["referrer"] = referrer; // WORKS great on first r

我正在使用TempData存储网站的推荐人,并通过jquery发出ajax调用以发送电子邮件。。。我使用tempdata恢复原始的referer URL

它在第一次读取时效果很好,但第二次读取时它是空的。。。。我想这是故意的。。。所以我决定尝试viewdata,但它是存储的,但在ajax调用中通过控制器读取时,它是空的

有人知道我的选择是什么吗

下面是两行的语法

        TempData["referrer"] = referrer;  // WORKS great on first read and then is NULL
        ViewData["referrer"] = referrer; // IS STORED but on first read is NULL

如您所见,TempData只会在下一个请求中持续存在,这是您在执行重定向等操作并希望确保下一个调用具有所需数据时真正需要的帮助。有关详细信息,请参见此链接:

Session["referrer"] = referrer;

请注意,该链接建议您可能需要同时检查ViewData和TempData中的键


代替这两个工具,您可以考虑使用<代码>会话<代码>来存储整个用户会话的数据,或者考虑在查询字符串或隐藏表单字段中隐藏信息。

这对于RC 1之前的MVC 1和MVC 2是正确的。对于MVC 2、RC 1和更高版本,它已更改,并且在第一次读取后删除密钥。我的猜测是(他没有说)他使用的是最新的MVC2,因为这可以解释他看到了什么。。。。对于会话,它似乎可以工作,但我一直认为使用asp.NETMVC最好远离会话?Viewdata我从未工作过。。。在第一次阅读时总是空的,没有特别的理由避免会话,因为您使用的是MVC;事实上,TempData是通过会话实现的。也就是说,在会话中,过时数据的可能性很高,因为它会一直保留到您删除它为止。我不清楚为什么要在多个跃点上存储推荐人(无论如何都可以通过请求获得)。