【问题标题】:Hold a data object temporarily in MVC controller,MVC,MVC Controller temp storage在 MVC 控制器、MVC、MVC 控制器临时存储中临时保存一个数据对象
【发布时间】:2023-03-16 00:31:01
【问题描述】:

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

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

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

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

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

解释:

在控制器中:httpcontext.current.cache 不会出现。

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

请帮帮我。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 caching asp.net-mvc-controller


    【解决方案1】:

    如果您只想为下一个请求存储数据,您可以使用TempData。如果数据应该可以在多个请求之间访问,则使用SessionHere 是对每一个的简短解释,并附有示例。

    【讨论】:

    • 任何其他可用的选项,而不是使用会话。
    • 如果您的数据是特定于用户的,那么恐怕 Session 是最合适的选择。您也可以尝试创建一个静态字典,其中键是 userId,值是您的数据,但这可能是此类任务的开销。
    • 字典对象管理。与其他东西(会话,缓存)相比,它需要更多的内存
    • 是的,我不推荐使用它,我认为Session是要走的路。
    • 仅会话选项。如果您知道 MVC 中的任何其他可能性,请告知
    【解决方案2】:

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

    【讨论】:

    • 是的,你是对的。如果你知道任何会话。请帮助我
    • TempData 是你要找的那个,它使用Session 而不是Session
    【解决方案3】:

    我建议 URL 参数 用于 HTTP Get,或 隐藏表单字段 用于 HTTP Post,如果这是短暂的。这主要是为了避免会话。

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

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

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

    我个人仅在必须进行 重定向 时才使用 TempData,否则我无法将其随身携带,或者如果我需要拥有该数据以备不时之需生成 PDF 或图像,将由 查看者实际页面 上通过 HTTP Get 调用,然后仅当 strong>模型数据对于 GET url 来说太大了(许多浏览器只支持超过 2000 个字符,很长的描述或许多字段可能会填满。)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      相关资源
      最近更新 更多