Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Razor MVC3在返回视图时保持全局变量设置_C#_Asp.net Mvc - Fatal编程技术网

C# Razor MVC3在返回视图时保持全局变量设置

C# Razor MVC3在返回视图时保持全局变量设置,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个全局字符串变量,在执行一个操作(按下submit按钮)后设置,然后我想在按下另一个按钮时访问同一个字符串,目前我正在执行类似的操作 GlobalVariable = "blah"; return View(); 再次访问此文件的最佳做法是什么。我想指出它是同一个页面(index.cshtml) 谢谢 将其放入ViewBag.GlobalVariable我不喜欢ViewBag,因此我的解决方案是将其添加到要传递到视图的视图模型中,并使用HiddenFor(),以便在每次后续操作中需要时将

我有一个全局字符串变量,在执行一个操作(按下submit按钮)后设置,然后我想在按下另一个按钮时访问同一个字符串,目前我正在执行类似的操作

GlobalVariable = "blah";
return View();
再次访问此文件的最佳做法是什么。我想指出它是同一个页面(index.cshtml)


谢谢

将其放入ViewBag.GlobalVariable

我不喜欢ViewBag,因此我的解决方案是将其添加到要传递到视图的视图模型中,并使用
HiddenFor()
,以便在每次后续操作中需要时将其发回。

在ASP MVC中,我建议不要使用Session甚至viebag,而是使用Cashing

 Cache["permvaluetostore"] =valuetokeep

您真的确定希望站点的每个用户都共享此状态吗?这是一个相当罕见的要求。更可能的是,它应该是特定于用户的

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";        
}

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

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


如果您希望值在所有会话中都是全局的,那么您也可以考虑使用<强>缓存> <强> ./p> < p>如果其为每个用户值,则使用此:

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

希望这能有所帮助。

任何ASP.NET(MVC)应用程序中的全局变量都可供该应用程序的每个用户使用。因此用户A可以设置变量,然后用户B可以将其设置为其他变量,然后用户A可以按其他按钮访问它,但现在它具有用户B设置的值。这就是您要找的吗?会话变量可能适用于此。我不确定这是否是您真正想要的。但是,如果您确实需要应用程序范围的变量(而且很可能不需要),请使用
application
对象:
HttpContext.application[“myID”]=“blah”是!当你不需要的时候,没有可视包!本次会议充满了可伸缩性和管理方面的问题,由于这是一个可行的解决方案,所以不打算-1本次会议,但我不推荐它。它仍然优于
ViewBag
:)。另外,使用
会话
,他们(Microsoft)可能会在下一个版本中解决这些问题,您不必重做任何代码。感谢您注意到这一点。这对于MVC3来说是一个非常糟糕的建议,仅供参考,有一个内置的会话变量,名为TempData,它非常轻量级,并且只传递给下一个控制器操作。MVC不能像Web表单那样使用。从版本1到版本4的所有MVC书籍都显示了这一点(是的,目前我拥有一本版本4的书籍),缓存是内置的属性。您的回答并不能说明您对MVC的理解,但除了TempData之外,它是ASP.NET WEB表单应用程序的一般建议。是的,你应该读更多的书。使用MVC进行缓存[OutputCache(Duration=3600,VaryByParam=“none”)]TempData是与MVC(web表单的其余部分)相关的唯一内容。干杯书在打折。我可以卖给你我的旧版本。请先学习MVC并用MVC构建现实世界的应用程序,然后再给出明确适合大多数webforms的建议。“Razor MVC3在返回视图时保持全局变量设置”是一个问题,您的回答意味着您对MVC应用程序的组合知之甚少。我有20名软件工程师对我的观点进行了审查并表示赞同。请不要再让自己难堪了。你的缓存对所有用户都是全局可见的,哈哈,我放弃了,哈哈,当然了。您是否在理解“任何人都可以看到我,但我可以过期”时遇到问题?或者告诉他们解决问题: