c# - 您如何在 MVC3 中的不同 Action Methods 调用之间保持全局变量的值?

标签 c# asp.net-mvc-3 global-variables

我正在使用 Razor 和 C# 开发 ASP.NET MVC 3 Web 应用程序。

我刚刚发现我对全局变量有一些问题,可能是因为我对 MVC 比较陌生。

我有一个带有一些全局变量和操作方法的 Controller 。我声明了一个全局变量,以便允许操作方法对其进行操作并将操作反射(reflect)到所有操作方法。我有以下情况:

public class myController : Controller
{
    private string _MyGlobalVariable;

    public ActionResult Index()
    {
       _MyGlobalVariable = "Hello";
       //other code
       return View("MyView");
    }

    public ActionResult Print()
    {
       _MyGlobalVariable += "Print";

       return View("PrintView", _MyGlobalVariable);
    }
}

Print() 操作方法是通过 MyView View 中的 Html.ActionLink() 调用的。

令人惊讶的是_MyGlobalVariable 的值没有被保留!所以在指令 _MyGlobalVariable += "Print" 之前 _MyGlobalVariable 的值等于 null。

我是不是犯了什么错误?如何在调用 View 之间保留全局变量的值?

谢谢

弗朗切斯科

PS:在我的特定情况下,全局变量是 Dictionary<K,V>但我想这不会改变逻辑。

PPS:我知道您可以使用 ViewModel 而不是全局变量在操作方法之间传递数据,但在我的例子中,如果我使用 Dictionary<K,V>,代码会少得多。通常我不会用 ViewModels 包装(我使用 POCOsLists<T> )

最佳答案

每个请求都会得到一个新的 Controller 实例。
由于您的“变量”是一个实例字段,因此它不会持久存在。

您可以通过将其设为static 或使用应用程序状态来解决此问题。

但是,不要
永远不要在 Web 应用程序中使用可变的全局状态。

特别是,如果您同时收到两个请求,您的字段将变得一团糟。

根据您尝试执行的操作,您可能希望使用 session 状态或 cookie。

关于c# - 您如何在 MVC3 中的不同 Action Methods 调用之间保持全局变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939353/

相关文章:

c# - MVC4 中的 AttributeUsage 有什么作用

html - 查询字符串中 Base64 编码参数的问题

ajax - 使用带有下拉列表 mvc3 的 ajax

javascript - 在 JavaScript 中指定全局上下文

c# - 如何取消订阅此 .NET 事件?

c# - 在 Unity 中重新加载场景后 StreamReader 无法正常工作

javascript - 为什么舍入值不同?

python - 全局变量的实现与取消引用的变量

xcode - 使用 AppDelegate 的变量作为全局变量 - 关于释放/保留的问题

c# - Getter、setter 和属性最佳实践。 Java 与 C#