Controller MVC中的全局变量

时间:2011-08-11 19:06:39

标签: c# asp.net-mvc

所以,我有这个变量,我在视图中通过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'在全球范围内,然后它总是可用,但对于我的生活,我无法弄清楚如何。

3 个答案:

答案 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

您可以为每个用户使用此功能,直到他们的会话处于活动状态。希望这有帮助