是否可以将内容存储在MVC控制器中?

时间:2015-03-05 14:21:11

标签: javascript c# ajax asp.net-mvc asp.net-mvc-5

这可能是一个愚蠢的问题,我怀疑这甚至是一个好的做法,但我想肯定,所以这里。

如果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());
}

3 个答案:

答案 0 :(得分:3)

没有。控制器被实例化并针对每个请求进行处理,因此您在其上设置的任何内容都将无法在下一个请求中存活。

答案 1 :(得分:1)

作为克里斯答案的补充,MVC被设计为相对无国籍。这就是为什么控制器被实例化并按原样处理的部分原因。

听起来您的应用程序可能需要稍微重新考虑一下,如果您需要这个。您可以以多种方式保留您的列表,其中包括会话和static修饰符,但您不应该这样做。

答案 2 :(得分:1)

ASP.NET为每个请求创建一个HomeController实例。因此,您发布列表的代码将仅在请求的生命周期内生效。如果您将列表设为静态,请执行以下操作:

public static List<int> Ids { get; set; }

它将在应用程序的生命周期内存在。 IISRESET或重新启动将意外清空列表。此外,如果您的应用程序在多台计算机上运行(即具有多个实例的Azure网站),则在一个实例上添加的项目将在另一个实例上不可见。

通常,如果你发现自己以这种方式保持着很多状态,那就意味着你可能会以错误的方式处理事情。缓存,会话,Db或其他一些持久性策略是您通常保持状态的方式。