所以,我有这个变量,我在视图中通过POST从控制器推入控制器。
然后我将变量推送到viewdata,以便下一个视图可以使用它。但是该视图不需要表单,因此我无法将相同的变量推送到下一个控制器。简而言之,从控制器来回查看和反转信息是很麻烦的,所以我正在寻找一种方法来保持控制器内部的全局变量是活的,这样它就可以了。所有行动结果都可以访问...我的计划的总体细分是......
-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'在全球范围内,然后它总是可用,但对于我的生活,我无法弄清楚如何。
答案 0 :(得分:8)
您是否考虑将其存储在Session?
中这将允许您从控制器或视图轻松访问它,并避免需要全局变量。
<强>存储强>
[HttpPost]
public ActionResult YourPostMethod(string name)
{
Session["Name"] = "yourName";
}
访问权限 *
确保在抓住它之前检查它是否存在:
var whatsMyName = (Session["Name"] != null) ? Session["Name"] : "";
可扩展性考虑
值得一提的是,MVC应用程序旨在模仿Web并且是无状态的。介绍Session变量会改变这一点,因此请注意它可能会引入有关可伸缩性等问题。
在Session中存储数据的每个用户都将占用服务器级别的资源。根据用户数量以及您在会话中存储的内容,如果这些值变得太大,您可能会耗尽内存。
答案 1 :(得分:0)
为什么不使用会话对象,这是一个在客户端连接时存在的关联数组?
答案 2 :(得分:0)
$_SESSION['name'] = "zzzz"; // store session data
name = $_SESSION['name']; //retrieve data
您可以为每个用户使用此功能,直到他们的会话处于活动状态。希望这有帮助