【发布时间】:2014-06-22 07:56:36
【问题描述】:
我无法管理用户在我的应用上获取的数据。
到目前为止,如果我对 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 操作。在此视图中,用户可以出于任何原因单击链接以查看“压缩”结果。但是,在我的应用程序中,当SeeItemsCompact 方法被立即调用时,所有 Session 数据都会丢失。
怎么样?我怎样才能让这些数据保持活力?
【问题讨论】:
-
在ASP.NET+MVC中建议使用
TempData而不是Session。 -
TempData 内部使用 Session 对象,读取值后会被销毁
标签: c# asp.net-mvc session session-variables session-timeout