C# 为什么这个全局列表在被GET方法调用时重置为null?

C# 为什么这个全局列表在被GET方法调用时重置为null?,c#,asp.net-mvc,get,C#,Asp.net Mvc,Get,我有一个在全球范围内声明的列表 public class MyController : Controller { private List<MyViewModel> wages = new List<MyViewModel>(); 每次从浏览器调用上述方法时,列表默认为null,并且计数为零。因此,每次调用Index GET方法时,都会重新计算在此方法中计算并存储在列表中的所有数据 根据我的理解,GET方法会在代码执行之前将所有运行时变量重置为默认状态,并用数

我有一个在全球范围内声明的列表

public class MyController : Controller
{

    private List<MyViewModel> wages = new List<MyViewModel>();
每次从浏览器调用上述方法时,列表默认为null,并且计数为零。因此,每次调用Index GET方法时,都会重新计算在此方法中计算并存储在列表中的所有数据

根据我的理解,GET方法会在代码执行之前将所有运行时变量重置为默认状态,并用数据重新填充变量,但我需要更正。但是,考虑到列表没有在Index GET方法中重新实例化,情况就不应该是这样了

为什么每次调用此GET方法时此列表都重置为null?当然,数据应该保留在列表中,因为列表被声明为全局变量,而不是方法范围的变量,对吗


我能做些什么来解决这个问题吗?是否至少要尝试并持久保存数据,以便它可以在控制器内的其他位置使用,并扩展到MVC应用程序?

在ASP.NET MVC中,ControllerFactory为每个请求创建一个
控制器

您必须注意ASP.NET生命周期,如果您想定义一个不应为每个请求重新创建的列表,请将定义行作为
静态类型放入
全局.asax
启动.cs

public static List<MyViewModel> Wages = new List<MyViewModel>(); // in Startup.cs or Global.asax

经过大量的思考和研究,我已经求助于使用会话变量来保存所讨论列表的实例,并在需要在控制器中修改所述列表的任何地方调用所述会话变量

我本来会使用@Saman Gholami的答案,但在我的实验中,我发现当调用Index GET方法时,列表会继续自行重置,因此我决定切换到会话变量@萨曼的回答优雅、简单、切中要害,但遗憾的是没有按我希望的方式进行

此外,根据下面的链接,会话变量主要在应用程序的服务器端而不是客户端加载和使用

这里是链接


HTTP是一种无状态协议,为每个请求创建一个新的控制器实例。有多种方法可以保持状态,如隐藏字段、cookies等。您在哪里定义
列表
?你能发布完整的控制器代码吗?@JohnathanBarclay-TBH我不知道每个请求都会声明一个新的控制器实例。我一直认为控制器是具体的,视图是动态的。会话变量在这个实例中可以工作吗?@SamanGholami我在控制器顶部定义了一个列表。请查看上面的编辑以查看我在何处声明列表。任何类型的持久或半持久存储都会对您有所帮助-会话、数据库、文件等。您只需要一点额外的代码来将数据存储在所选位置,然后每次再次检索它。Derp。我完全忽略了解决此问题的Global.asax路线。谢谢你的来信。
public static List<MyViewModel> Wages = new List<MyViewModel>(); // in Startup.cs or Global.asax
public ActionResult Index()
{

   if(Startup.Wages is empty)
   {
      //Populate List
   }
   else if(Startup.Wages is NOT empty)
   {
     //Display List Contents to User
   }
   else
   {
     //Display 400 error (bad request)
   }

}