gpt4 book ai didi

c# - 让存储在 Session 中的数据保持事件状态

转载 作者:太空宇宙 更新时间:2023-11-03 15:56:08 24 4
gpt4 key购买 nike

我在管理用户在我的应用中获取的数据时遇到了麻烦。

到目前为止,如果我对 ASP.NET MVC 的理解是我认为的那样,我不能将获取的数据放在静态字段中。例如,这样做是个坏主意:

private static List<MyObjects> listObjects = new List<MyObjects> { get; set;}

public List<MyObjects> GetMyObjects (int _objectID)
{
using(MyDatabase database = new MyDatabase())
{
listObjects = (from o in database.MyObjects
where o.MatchingID == _objectID
select o).ToList();

return listObjects;
}
}

因为这将使网站上的所有用户都可以使用数据列表。所以我读了一些东西,我认为我需要将它们放入 MVC Session 字典中,以便每个用户都可以浏览他们自己的列表。

所以我有这些方法:

public List<MyObjects> GetMyObjects (int _objectID)
{
using(MyDatabase database = new MyDatabase())
{
List<MyObjects> listObjects = (from o in database.MyObjects
where o.MatchingID == _objectID
select o).ToList();

return listObjects;
}
}

[HttpGet]
public ActionResult SeeItemsByID(int? _objectID)
{
// Pre-validations to make sure that the ID is valid, then:
List<MyObjects> listObjects = GetMyObjects((int)_objectID);

Session["myObjects"] = listObjects;

return RedirectToAction("SeeItems");
}

[HttpGet]
public ActionResult SeeItems()
{
List<MyObjects> listObjects = Session["myObjects"] as List<MyObjects>;

if(listObjects == null)
{
return RedirectToAction("Home");
}

return View(listObjects);
}


[HttpGet]
public ActionResult SeeItemsCompact()
{
List<MyObjects> listObjects = Session["myObjects"] as List<MyObjects>;

if(listObjects == null)
{
return RedirectToAction("Home");
}

return View(listObjects);
}

让我们继续这个过程:

首先,用户单击调用 SeeItemsByID 操作的链接,然后它被重定向到 SeeItems 操作。在此 View 中,用户可以出于任何原因单击链接以查看“压缩”结果。但是,在我的应用程序中,当紧接着调用 SeeItemsCompact 方法时,所有 session 数据都将丢失。

如何?我怎样才能让这些数据保持活力?

最佳答案

ID 是否特定于用户?这份 list 是如此之大以至于这甚至有意义吗? (这种情况很少发生,如果发生,您将希望在服务器上实现分页以减少检索时间)

如果是我,我会根据 ID 将数据序列化到文件中,然后当用户返回并且 session 已过期时,您无需重新检索数据。您可以检查文件上的时间戳,如果时间戳太旧,则重新加载数据。

关于c# - 让存储在 Session 中的数据保持事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23482233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com