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变量中的所有数据都将丢失。
如果要持久化数据,需要像数据库一样存储在持久化存储中。
这个问题听起来可能很愚蠢,但我是 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变量中的所有数据都将丢失。
如果要持久化数据,需要像数据库一样存储在持久化存储中。