我正在使用 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 包装(我使用 POCOs 或 Lists<T>
)
最佳答案
每个请求都会得到一个新的 Controller 实例。
由于您的“变量”是一个实例字段,因此它不会持久存在。
您可以通过将其设为static
或使用应用程序状态来解决此问题。
但是,不要。
永远不要在 Web 应用程序中使用可变的全局状态。
特别是,如果您同时收到两个请求,您的字段将变得一团糟。
根据您尝试执行的操作,您可能希望使用 session 状态或 cookie。
关于c# - 您如何在 MVC3 中的不同 Action Methods 调用之间保持全局变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939353/