【问题标题】:Problems with using Sessions in MVC在 MVC 中使用 Session 的问题
【发布时间】:2014-07-02 11:15:29
【问题描述】:

我正在开发网络应用程序,没什么特别的。

有很多用户,每个用户都有很多项目。

为了存储数据,我使用了 Session 容器。

当用户打开项目时,它就像(作为示例)

Session["projectId"] = current_project_id;
Session["projectName"] = current_project_name;

所以当用户打开让我们在其他选项卡中说第二个项目时,您会看到关于第一个项目的数据只是替换为第二个项目数据。

真的很糟糕,是的。

所以我对如何构建应用程序很感兴趣,这样不同的用户可以在不同的选项卡中打开他们的不同项目,并且一切正常,没有任何数据丢失。

我读到了 TempDataViewBag,但仍然无法想象如何替换这些 Session 变量。

什么可以帮助我?我应该使用什么来存储每个新标签的新数据?

【问题讨论】:

  • 您在会话中存储什么类型的数据?为什么在会话中需要它? Session 不是 MVC 的初衷,因为它是一种更加无状态的设计。
  • @mckeejm 我存储了一些ids,目的是从控制器中的数据库中获取一些数据
  • 一个例子——用户在project_id保存在Session["project_id"]之后选择它的项目(或创建一个)
  • 我希望用户可以选择几个项目并像并行一样使用它们
  • 所以不要将这些 id 存储在会话中,将这些 id 放在 url 中并以这种方式通过控制器获取它们。这将使它们在每个标签上都是唯一的,因为网址会有所不同。

标签: asp.net-mvc web-services session session-variables


【解决方案1】:

您可以在 Session 中存储项目列表或字典:

var projects = new Dictionary<int, string>();
projects.Add(projectId, projectName);

Session["UserProjects"] = projects;

后来:

var projects = (Dictionary<int, string>)Session["UserProjects"];

【讨论】:

  • 嗯,projects 变量中有几个项目的数据?但是我想如何从中只选择一个我需要的 wic 呢?或者,也许我了解一些破旧的东西?
  • 基于您的 projectId?如果您想存储项目名称以外的更多详细信息,可以将字典更改为 Dictionary&lt;int, Project&gt;,其中 Project 是您的项目模型。
  • 好吧,我的意思是它将如何存储不同的数据,让我们说不同的选项卡(当然,如果在这些选项卡中打开了不同的项目)并且当一个项目在几个选项卡中打开时只使用一个容器等等
  • 每个选项卡都有一个项目信息。每个项目都由 ProjectId 标识。每个选项卡都有一个项目,因此知道 ProjectId。您向 Session 询问项目详情:((Dictionary&lt;int, Project&gt;)Session["UserProjects"])[projectId]
  • 谢谢我尝试用这种方式重写东西! (+1 如果它可以按照我的需要完美运行,我会将其标记为答案:))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 2010-12-02
  • 2010-11-10
相关资源
最近更新 更多