HTTP是无状态的。
与WPF应用程序或Winfows Forms应用程序不同,Web应用程序不维护充满内存状态的“正在运行的应用程序”。 (至少不是以相同的直观方式)。每次请求每次都会建立一个新状态。在MVC的情况下,这包括Controller的新实例。 (或者在Web窗体的情况下,该页面的一个新实例)。
为了使数据从一个请求持久保存到另一个请求,您需要将其保存在某个地方。 “某个地方”可能是一大堆不同的地方。例如,如果这个“管理列表”是相对静态的并且不太可能改变,并且对于所有用户来说都是相同的,那么这个页面的表单元素,cookies,会话,静态变量,数据库,文件等网站,那么你可以将它存储在一个静态属性中,如果它没有设置,它会被延迟加载。东西结构是这样的:
private static List<ApplicationUser> _adminList;
private static List<ApplicationUser> AdminList
{
get
{
if (_adminList == null)
_adminList = GetAdminsFromData();
return _adminList;
}
}
(但是你填充列表将是函数调用做什么,当然)。
这样的消费代码永远不会真正需要知道或关心如果列表是否被填充或没有。只要使用AdminList
属性,并且如果它尚未填充(如果由于某种原因已经清除了static
上下文,例如应用程序重新启动),那么它将被填充。否则,它只会包含上次放置的内容。
每个请求都会创建一个新的控制器实例。 – Jasen