MVC5 在所有函数中保留对象

MVC5 keep object in all functions

这个问题听起来可能很愚蠢,但我是 asp.net mvc 的新手,找不到问题的答案。 在我的应用程序(游戏)中,我有一个游戏 GameModel 模型(它包含一个多维数组)。我想要的是能够在我使用的每个控制器中使用相同的对象。所以我创建它一次,然后在每个控制器函数中使用它。 基本上只有一个视图,控制器中的所有其他功能都使用模型的功能编辑对象

我的想法是将对象放在会话变量中,如果未设置对象,则创建一个函数来检查会话变量。但这在我看来不合逻辑,希望有人有更好的解决方案。

我不明白你为什么觉得 Session 不好看。它的目的是在多个请求中保持每个用户的数据。

您还可以 return 使用隐藏字段向客户端发送游戏状态。这甚至比会话更好,因为您的游戏状态不会在服务器中更改,作为对其他人操作的响应。

最后,您可以使用 class 的静态 属性。 ASP.NET 中的静态属性在整个应用程序生命周期中保持活动状态,并且对所有用户同样可见。意思是,如果一个用户在那里写了一些东西,另一个用户就可以阅读它。不过,您可以使用 Dictionary<> 为每个用户分配数据,其中键是用户 ID。

根据您的问题,您想跟踪用户的数据(游戏数据)。​​

在 Session 变量中存储 GameModel 对这种情况很有意义。

如果您发现自己从很多地方调用该 Session 变量,您可以创建一个 BaseController 并将其保存在那里。然后继承它的所有控制器。

例如,

public class BaseController : Controller
{
    public GameModel CurrentGameModel
    {
        get
        {
            var model = Session["GameModel"] as GameModel;
            if (model == null)
            {
                model = new GameModel();
                Session["GameModel"] = model;
            }
            return model;
        }
        set { Session["GameModel"] = value; }
    }
}

public class HomeController : BaseController
{
}

注意:你必须记住,如果应用程序池回收应用程序崩溃,存储在Session变量中的所有数据都将丢失。

如果要持久化数据,需要像数据库一样存储在持久化存储中。