控制器MVC内部的全局变量
本文关键字:全局变量 内部 MVC 控制器 | 更新日期: 2023-09-27 18:05:10
因此,我有一个变量,我通过POST从视图中的一个窗体将其推入控制器。
然后我将变量推送到视图数据中,这样它就可以用于下一个视图,这很好。但该视图不需要表单,所以我无法将相同的变量推送到下一个控制器中。简言之,在控制器之间来回推送信息片段以查看和反向是很麻烦的,所以我正在寻找一种方法来保持控制器中的全局变量的活力,以便所有操作结果都可以访问它。。。我的程序的总体分解是。。。
-User types a "name"
-I send "name" to controller.
-I push 'name' into viewstate (query entity framework to get a list of stuff 'name'
has access to) and return that list into the view.
-In that view I can access the 'name' since it was in view state.
-Clicking on a link inside the page takes me to another controller where I need
to get access to 'name' WITHOUT passing view Routing or POST.
显然,最简单的方法是全局声明"name",然后它总是可用的,但就我的一生而言,我不知道该怎么做。
您是否考虑将其存储在会话中?
这将允许您从控制器或视图轻松访问它,并避免了对全局变量的需要。
存储:
[HttpPost]
public ActionResult YourPostMethod(string name)
{
Session["Name"] = "yourName";
}
访问:*
确保在抓取之前检查它是否存在:
var whatsMyName = (Session["Name"] != null) ? Session["Name"] : "";
可扩展性考虑
值得一提的是,MVC应用程序是为了模仿web而设计的,并且是无状态的。引入会话变量会改变这一点,因此请注意,它可能会引入有关可扩展性等问题。
在会话中存储数据的每个用户都将占用服务器级别的资源。根据用户数量和会话中存储的内容,如果这些值过大,可能会耗尽内存。
为什么不使用会话对象,它是一个在客户端连接时存在的关联数组?
$_SESSION['name'] = "zzzz"; // store session data
name = $_SESSION['name']; //retrieve data
您可以对每个用户使用此功能,直到他们的会话处于活动状态。。希望这对有帮助