2011-08-11 64 views
1

所以,我有这个变量,我通过POST从我的视图中的窗体推入控制器。控制器MVC内部的全局变量

然后我把这个变量放到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. 

显然,最简单的方法是将申报“名”,同时将它总是可用的,但对我的生活我无法弄清楚如何。

回答

8

您是否考虑将其存储在Session

这将允许您轻松访问它,无论是从您的控制器还是视图,并避免需要全局变量。

储存:

[HttpPost] 
public ActionResult YourPostMethod(string name) 
{ 
    Session["Name"] = "yourName"; 
} 

访问: *

一定要检查它的存在抓住它之前:

var whatsMyName = (Session["Name"] != null) ? Session["Name"] : ""; 

可扩展性考虑

值得一提的是,MVC应用程序旨在模拟网页并且是无状态的。介绍Session变量会改变这一点,因此请注意,它可能会引入有关可伸缩性等问题。

每个在会话中存储数据的用户都将占用服务器级别的资源。根据用户数量以及您在Session中存储的内容,如果这些值过大,则可能会导致内存不足。

0

为什么不使用session对象,这是一个在客户端连接时存在的关联数组?

1
$_SESSION['name'] = "zzzz"; // store session data 
name = $_SESSION['name']; //retrieve data 

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

+0

更多http://www.tizag.com/phpT/phpsessions.php – Baz1nga