Controller MVC中的全局变量

Kul*_*gar 2 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.
Run Code Online (Sandbox Code Playgroud)

显然,最简单的方法是在全球范围内声明"名称",然后它总是可用,但对于我的生活,我无法弄清楚如何.

Rio*_*ams 8

您是否考虑过将其存储在会话中

这将允许您从控制器或视图轻松访问它,并避免需要全局变量.

储存:

[HttpPost] 
public ActionResult YourPostMethod(string name)
{
    Session["Name"] = "yourName";
}
Run Code Online (Sandbox Code Playgroud)

访问:*

确保在抓取它之前检查它是否存在:

var whatsMyName = (Session["Name"] != null) ? Session["Name"] : "";
Run Code Online (Sandbox Code Playgroud)

可扩展性考虑

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

在会话中存储数据的每个用户将占用服务器级别的资源.根据用户数量以及您在会话中存储的内容,如果这些值变得太大,您可能会耗尽内存.