如何将数据保存在MVC控制器的内存中?

Dar*_*Zon 6 asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

请看下面的动作.当用户第一次导航时,创建一个对象,然后当他在页面中导航时,再次访问Action但是通过Ajax请求和数据disapper(worksheets = null).

    private static List<Worksheet> worksheets;
    public ActionResult DoTest()
    {
        if (Request.IsAjaxRequest())
        {
            return PartialView("_Problems", worksheets[1]);
        }

        // first time
        worksheets = new List<Worksheet>()
        {
            new Worksheet("Hoja 1", ...),
            new Worksheet("Hoja 2", ...)
        };
        return View(worksheets[0]);
    }
Run Code Online (Sandbox Code Playgroud)

我的第一个解决方案是将变量工作表设置为静态,但我认为这不是一个好习惯.我是在做一个好方法还是有另外一个tweeks?

Uli*_*ses 9

远离静态变量,尤其是在数据依赖于用户的情况下.您可以利用ASP.NET Session对象.

通过将工作表字段更改为在Session对象中存储其值的属性,可以轻松完成此操作.这样,它将在后续调用中可用.例:

  private List<Worksheet> worksheets
  {
    get{ return Session["worksheets"] as List<Worksheet>;}
    set{ Session["worksheets"] = value; }
  }

  public ActionResult DoTest()
  {
      if (Request.IsAjaxRequest())
      {
        return PartialView("_Problems", worksheets[1]);
      }

      // first time
      worksheets = new List<Worksheet>()
      {
          new Worksheet("Hoja 1", ...),
          new Worksheet("Hoja 2", ...)
      };
      return View(worksheets[0]);
  }
Run Code Online (Sandbox Code Playgroud)