2016-03-03 52 views
0

我要去ftech列出我的应用程序管理员(角色为'admin'的用户),并将它们存储在自定义模型的控制器中的List<ApplicationUser> AdminList以及其create操作中。 AdminList被填充到内部创建操作中以填充create视图中的下拉列表。ASP.NET MVC:请问HTTPPost后类的成员会留在内存中还是处置?

我想知道是否有可能在调用create和postback之间放置名单AdminList?换句话说,是否需要在回发方法中再次填充AdminList或者处理将永远不会发生?

+2

每个请求都会创建一个新的控制器实例。 – Jasen

回答

1

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上下文,例如应用程序重新启动),那么它将被填充。否则,它只会包含上次放置的内容。