有可能将东西存储在MVC控制器中吗
Is it possible to store things in a MVC Controller?
这可能是一个愚蠢的问题,我怀疑这是否是一个好的做法,但我想确定,所以就这样吧。
如果HomeController有一个列表作为字段,并且有一个用户添加到其中,那么该用户会将列表中的内容返回还是为空?
当有更多的用户时,该怎么办?他们会有自己的名单吗?
我之所以问这个问题,是因为我知道如何在客户端上保存小东西,在DB中保存大东西,但我想知道我是否有"服务器"选项,在那里我可以在MVC中的控制器中存储一些东西。
public List<int> Ids { get; set; }
public HomeController()
{
Ids = new List<int>();
}
public ContentResult AddToIds(int id)
{
Ids.Add(id);
return Content("Added");
}
public ContentResult GetIds()
{
return Content(Ids.Count.ToString());
}
否。控制器是为每个请求实例化和处理的,所以你在它上设置的任何东西都不会在下一个请求中幸存下来。
作为Chris答案的补充,MVC被设计成相对无状态的。这就是控制器被实例化并按原样处理的部分原因。
听起来,如果您有此需求,您的应用程序可能需要重新考虑一下。您可以通过多种方式保持列表,包括session和static
修饰符,但不应该。
ASP.NET为每个请求创建一个HomeController实例。因此,您在列表中发布的代码将只在请求的生存期内有效。如果你让列表是静态的,就像这样:
public static List<int> Ids { get; set; }
它将在应用程序的整个生命周期内有效。IISRESET或重新启动将意外清空列表。此外,如果您的应用程序在多台计算机上运行(即具有多个实例的Azure网站),则在一个实例上添加的项目在另一个实例上将不可见。
通常,如果你发现自己以这种方式保持着很多状态,这意味着你可能会以错误的方式行事。Cache、Session、Db或其他一些持久性策略是您通常保持状态的方式。
相关文章:
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 将不在模型中的数据返回到mvc控制器
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- 从 javascript 获取 MVC 控制器中的操作参数时出错
- 使用 $.getJson 方法从 jquery 调用 C# MVC 控制器方法
- 将数据从MVC控制器传递到Angular视图,而不在最终的html中显示数据值
- 有可能将东西存储在MVC控制器中吗
- 如何使用json对发送到MVC控制器的数据进行编码
- POST KnockoutJS数据到mvc控制器没有绑定
- 在Javascript函数中获取MVC控制器名称
- ASP.NET MVC:2d数组在从javascript传递到MVC控制器操作后为null
- 如何将JavaScript文件路径映射到ASP.Net MVC控制器操作
- AJAX只将数组的最后一个元素传递给MVC 5控制器
- 无法使用.ajax调用显示MVC控制器返回的属性值
- 使用ajax将字符串数组传递给mvc控制器
- 数据从Javascript传递到MVC控制器
- 通过url将jsonArray传递给mvc控制器,无法获取对象
- 使用MVC控制器与websockets连接到windowsazure
- AngularJS vs MVC控制器选择什么