Razor MVC3保持全局变量集返回视图

时间:2012-09-14 14:32:57

标签: c# asp.net-mvc

我有一个全局字符串变量,我在一个动作完成后设置(按下提交按钮),然后当我按下另一个按钮时我想访问相同的字符串,目前我正在做类似的事情

GlobalVariable = "blah";
return View();

再次访问此内容的最佳做法是什么?我想指出它是同一页面(index.cshtml)

谢谢!

6 个答案:

答案 0 :(得分:7)

如果是每用户值,请使用:

Session["MyKey"] = "MyValue"; // save the value
var myValue = (string) Session["MyKey"]; // retrieve the value

如果所有用户的一个值使用此值:

Application["MyKey"] = "MyValue"; // save the value
var myValue = (string) Application["MyKey"]; // retrieve the value

希望这有帮助。

答案 1 :(得分:4)

您确定要让网站的每个用户共享此状态吗?这是一个非常罕见的要求。更可能的是它应该是用户特有的。

ASP.NET中很少有地方可以保存信息:

  • 应用 - 全局范围,因此所有用户都可以看到该值。
  • 会话 - 会话范围,对一个用户可见
  • 缓存 - 全局范围,因此所有用户都可以看到该值。
  • TempData - 在此和下一个请求期间,对一个用户可见

示例:

public ActionResult MyAction()
{
    HttpContext.Application["global_var"] = "anyone can see me";
    HttpContext.Cache["global_cached"] = "anyone can see me, but I can expire";
    Session["session_var"] = "only this user can see me";
    TempData["flash_var"]= "only this user can see me but also in next request";        
}

答案 2 :(得分:3)

我不是ViewBag的粉丝,所以我的解决方案是将它添加到您传递给视图的视图模型中,并使用HiddenFor()以便在需要时将其发回每个后续行动。

答案 3 :(得分:1)

将其放入ViewBag.GlobalVariable

答案 4 :(得分:0)

在ASP MVC中我不建议使用Session甚至是viewbag,我建议在这种情况下使用Cashing

 Cache["permvaluetostore"] =valuetokeep

答案 5 :(得分:0)

您需要保留该数据。您可以使用数据库表会话变量来执行此操作。

会话变量值可用于当前会话。

如果您希望所有会话中的值都是全局值,您还可以考虑使用缓存