我有一个想要存放片刻的物体。对象现在在控制器中,控制器将生成一个视图。从视图到下一个控制器发出AJAX请求。那一刻我需要先前存储的对象。以前,我使用会话,它运作良好。但不确定这是正确的做法。会话是对此的答案还是还有其他什么?
我也使用了缓存。但是根据缓存概念。它将访问所有用户。因此,一个用户数据将覆盖到另一个用户数据。因此缓存的对象数据将针对同一用户进行更改。我需要处理特定用户的数据存储(独立)。
怎么可能?请与我分享其他方法。
在控制器中我使用了Httpcontext.cache["key"]=dataset;
但有人建议像这样。但它没有显示
说明:
在控制器中: httpcontext.current.cache
未来。
HttpContext.Currenthandler
和 HttpContext.Currentnotification
属性。所以我们如何处理MVC中的临时数据存储。
请帮帮我。
答案 0 :(得分:9)
如果您只想存储下一个请求的数据,可以使用TempData
。如果数据应在多个请求之间可访问,则使用Session
。 Here是对每个例子的简短解释。
答案 1 :(得分:1)
正如Alex所说,您可以使用TempData
,但如果您想在多个请求中使用数据,则可以在读取值后使用TempData.Keep("YourKey")
来保留下一个请求的数据。对于您的信息,TempData
在内部使用Session
来存储您的数据(暂时)
答案 2 :(得分:0)
对于 HTTP发布,我建议使用网址参数;对于 HTTP发布,我建议使用隐藏表单字段,如果这是短暂的。这非常关乎避免会话。
但如果真的坚持,那么数据库可能是一个合理的位置。 想象一下因为会话超时而不想转储的购物车;因为您想在下次提醒用户他们仍未购买的商品。
为什么不使用会话?我一般不建议使用会话,因为你会发现自己的全局变量 两个不同浏览器窗口正在操纵。 想象一下玻璃杯。一个窗口试图用冰茶填充它。另一个窗口正试图用柠檬水填充它。但是你有什么?是柠檬水吗?是冰茶吗?或者它是Arnold-Palmer?如果你试图在会话上放太多东西,过度期望它只是在那里,你可能会创建一个非确定性的应用程序如果天堂禁止用户打开一个第二个窗口或标签,并在窗口之间来回切换。
如果你真的没有其他选择,我对Temp Data更好。但这不是因为持续数据超过一秒钟。在第一个请求读取后,临时数据将消失,因为它意味着非常临时的使用。
我个人只使用 TempData ,如果我必须执行重定向,我无法保留它,或者我需要拥有该数据比如生成一个 PDF 或图像,这些图片将通过实际页面上的查看器通过HTTP调用,然后仅在模型数据对于GET网址而言太大(许多浏览器仅支持超过2000个字符,长描述或许多字段可能会填满。)
但同样,在隐藏的表单变量或url参数中推送项目可能是安全的,因为您没有多个窗口使用冲突(每个都带有自己的数据,让您高枕无忧。)