4

我有一个我想暂时存储的对象。该对象现在在控制器中,控制器将生成一个视图。从视图向下一个控制器发出 AJAX 请求。在那一刻,我需要以前存储的对象。以前,我使用过会话并且效果很好。但不确定这是正确的做法。session 是这个问题的答案还是还有其他什么?

我也使用了缓存。但根据缓存概念。它将访问所有用户。因此一个用户数据将被覆盖到另一个用户。因此缓存的对象数据将为同一个用户更改。我需要处理数据特定用户的存储(独立)。

这怎么可能?还有其他方法请分享给我。

在控制器中我使用过Httpcontext.cache["key"]=dataset;

但有人建议这样。但它没有显示

解释:

在控制器中:httpcontext.current.cache没有来。

HttpContext.CurrenthandlerHttpContext.Currentnotification属性只来了。那么我们如何处理 MVC 中的临时数据存储。

请帮我。

4

3 回答 3

9

TempData如果您只想为下一个请求存储数据,则可以使用。如果数据应该可以在多个请求之间访问,那么使用Session. 以下是每个示例的简短说明。

于 2013-10-10T08:29:02.993 回答
1

正如亚历克斯所说,您可以使用TempData,但如果您想在多个请求中使用数据,您也可以TempData.Keep("YourKey")在读取值后使用以保留下一个请求的数据。供您的信息在TempData内部用于Session存储您的数据(临时)

于 2013-10-10T09:37:14.140 回答
0

我会推荐HTTP Get的URL 参数,或HTTP Post隐藏表单字段,如果这是短暂的。这与避免会话有关。

但如果它真的应该持久化,那么数据库可能是一个合理的位置。 想象一下您不想因为会话超时而丢弃的购物车;因为您想下次提醒用户他们还没有购买的物品。

为什么不使用会话?我通常不建议使用会话,因为您可能会发现自己拥有一个由两个不同浏览器窗口操作的全局变量。想象一个玻璃杯。一扇窗户正试图用冰茶装满它。另一个窗口正试图用柠檬水填充它。但是你有什么?是柠檬水吗?是冰茶吗?还是阿诺德-帕尔默? 如果您尝试在会话上放置太多东西,并且过度期望它只是在那里,您可能会创建一个不确定的应用程序,如果天堂禁止用户打开第二个窗口或选项卡,并在两者之间来回切换视窗。

如果您真的没有其他选择,我对 Temp Data 更满意。但这不适用于将数据持久化超过一秒钟。临时数据将在第一个请求读取后消失,例如,它是用于非常临时的使用。

我个人只使用TempData如果我必须进行重定向而我无法将其保留在我身边,或者如果我需要该数据来生成将通过 HTTP Get 调用的PDF或图像实际页面上的查看器,然后仅当模型数据对于 GET url 而言太大时(许多浏览器仅支持超过 2000 个字符,长描述或许多字段可能会填满。)

但同样,在隐藏的表单变量或 url 参数中推送项目可能是安全的,因为您没有多个窗口使用冲突(每个都携带自己的数据以便安心。)

于 2015-03-17T00:36:18.127 回答