用户之间共享静态词典

时间:2018-07-16 14:34:53

标签: c# asp.net-core

我在Home Controller中有2个声明的静态词典:

private static Dictionary<string, string> _existingBranchesDict;
private static Dictionary<Guid, string> _choosedBranches;

我将它们声明为静态是因为它们在同一Controller的许多方法中使用,并防止了null引用异常。问题是它们对于每个用户应该是唯一的,但是由于使用了静态修饰符,这些词典在所有用户之间共享。当我在不同方法中使用它们时,我必须在哪里存储这些数据并且没有任何空引用异常?我将它们用于其他方法,例如:

[HttpPost]
    public void DeleteBranch(Guid partialViewID, int deletedBranchIndex)
    {
        if (_choosedBranches.ContainsKey(partialViewID))
        {
            var resettedBranch = _choosedBranches[partialViewID];
             _existingBranchesDict[resettedBranch] = "Enabled";
            _choosedBranches.Remove(partialViewID);
        }
    }

[HttpPost]
    public void LoadBranch(string Name, Guid ID)
    {
        _existingBranchesDict[Name] = "Disabled";

        if (_choosedBranches.ContainsKey(ID))
        {
            _existingBranchesDict[_choosedBranches[ID]] = "Enabled";
        }
        _choosedBranches[ID] = Name;
    }

AJAX会从在单个视图上呈现的不同局部视图调用它们。它们为每个局部视图的所有下拉列表存储相同的数据,并且当用户选择单个元素时,应将其从其他局部视图的其他下拉列表中删除。

1 个答案:

答案 0 :(得分:0)

您只需要使用HttpContext.Items property

  

获取或设置可用于共享此请求范围内的数据的键/值集合。