静态变量导致mvc中的并发问题

Ryd*_*der 3 c# oop asp.net-mvc static-variables asp.net-mvc-4

我们使用mvc4开发Web应用程序.在许多情况下,我们将从First Page/View中的用户获得价值,我们需要保留一些变量,直到用户到达最终页面/视图.他/她可以通过4-5个视图从第一个视图到达最终视图.

保持MVC中的价值.我们有3种方式.

1.全局变量 - 但是如果我在一个动作方法中赋值.该值将在另一个操作方法中重置.所以我们放弃了它.

2.Session - 但我们需要在每个会话中保留5个以上的值.所以我们放弃了它.

3.Static Varibale - 其功效与魅力相似.但在多用户中它导致了并发问题.

mvc中还有其他任何方法可以保持价值吗?请指导我.

Hab*_*bib 5

静态变量将在应用程序域的生命周期中持续存在,这就是您看到多个用户的并发问题的原因.

请参阅:静态变量及其在ASP.Net网站中的含义

在会话中存储五个值应该没有任何问题.您可以List<T>在会话中拥有并存储它.喜欢:

List<string> someValues = new List<string> {"A","B","C","D", "E",};
HttpContext.Current.Session["userValues"] = someValues;
Run Code Online (Sandbox Code Playgroud)

要检索它:

var someValues =  HttpContext.Current.Session["userValues"] as List<string>;
if(someValues != null)
{
 // found
}
Run Code Online (Sandbox Code Playgroud)

您应该考虑的唯一事情是数据的大小.会话在每个用户的服务器级别存储,存储太多数据可能会导致问题,但这取决于您的配置.

您还可以看到:什么是ViewData,ViewBag和TempData? - 用于在当前请求和后续请求之间传递数据的MVC选项

  • @Ryder:你有答案.这是会议的目的.如果您有一些限制会话使用的任意要求,那么作为开发人员,您有责任通知并教导决策者,以便他们放松要求.毕竟,你应该是这里的专家.这就是他们雇用你的原因.静态/全局变量根本不起作用.你必须使用会话. (2认同)