代码之家  ›  专栏  ›  技术社区  ›  achmad darmawan

多用户访问时如何使用可变静态列表

  •  0
  • achmad darmawan  · 技术社区  · 8 年前

    如果一个用户使用该变量,那么当两个或多个用户使用该变量时,“静态”变量将被下一个用户读取,第一个用户实例在填充GRIDVIEW时有5行数据,并且当进入页面时,我试图通过其他浏览器访问,第二个用户上的GRIDVIEW已经填充了5行输入的数据。第一个用户。那么如何解决这个问题呢?请看我的代码并给我一个解决方案。谢谢。

    static List<ServicesModels> _gridPackageDetail = new List<ServicesModels>();
    
    private void AddListAction(string alfa, string beta)
    {
        ServicesModels data = new ServicesModels()
        {
              id_service_detail = Guid.NewGuid(), 
              scope_name = alfa, 
              detail_name= beta
        };
        _gridPackageDetail.Add(data);
    }
    
    public ActionResult GridPackageDetail()
    {
        ViewBag.DataListPackage = _gridPackageDetail.OrderBy(a => a.scope_name).ToList();
        return PartialView();
    }
    

    我在MVC3控制器中的代码。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Plexis Plexis    8 年前

    代码运行良好,因为这是“静态”的意图,对于多个用户具有相同的数据。在您的情况下,您需要创建一个列表、字典或多维数组(任何您熟悉的数据结构)并保存每次使用的数据,然后根据用户id在需要时检索数据。

        static List<ServicesModels> _gridPackageDetail = new List<ServicesModels>();
    
    private void AddListAction(string alfa, string beta)
    {
        ServicesModels data = new ServicesModels()
        {
              id_service_detail = Guid.NewGuid(), 
              scope_name = alfa, 
              detail_name= beta,
             user_id = getTheID()// Get the id of the user
    
        };
        _gridPackageDetail.Add(data);
    }
    
    public ActionResult GridPackageDetail()
    {
        ViewBag.DataListPackage = _gridPackageDetail.OrderBy(a => a.scope_name && user_id ==getTheID()).ToList();
        return PartialView();
    }
    

    通过获取用户的id来替换gettheid()。

    如果要保留所有用户的数据,则使用此选项。否则,您应该删除静态关键字。