C# TreeView节点似乎正在缓存

C# TreeView节点似乎正在缓存,c#,treeview,C#,Treeview,我正在用c#创建一个自定义web用户控件。它旨在与权限层次结构交互。我们有不同的“站点”,每个站点都有许多“应用程序”,每个应用程序都有许多“权限” 因此,我们有一个TabPanel,它为每个站点加载一个选项卡。然后在每个选项卡中,我们都有一个树状视图,其中父节点是应用程序,内部节点是权限 权限根据某些条件显示复选框,并根据HasPermission函数是否返回true进行检查 所有这些代码都有效…但仅适用于选定的第一个用户。对于任何后续选择的用户,调试器中的一步显示所有正在执行的正确逻辑,但页

我正在用c#创建一个自定义web用户控件。它旨在与权限层次结构交互。我们有不同的“站点”,每个站点都有许多“应用程序”,每个应用程序都有许多“权限”

因此,我们有一个TabPanel,它为每个站点加载一个选项卡。然后在每个选项卡中,我们都有一个树状视图,其中父节点是应用程序,内部节点是权限

权限根据某些条件显示复选框,并根据HasPermission函数是否返回true进行检查

所有这些代码都有效…但仅适用于选定的第一个用户。对于任何后续选择的用户,调试器中的一步显示所有正在执行的正确逻辑,但页面显示的信息与第一个选择的用户的信息相同

所以基本上,它把显示器保存在某个地方…我不知道在哪里

public partial class Permissions : System.Web.UI.UserControl
{
    string _NTLogin;
    CoreUser _User;
    bool _IsAdmin;
    public string NTLogin
    {
        get
        {
            return _NTLogin;
        }
        set
        {
            ViewState["NTLogin"] = value;
            _NTLogin = value;
        }
    }
    public bool IsAdmin
    {
        get
        {
            return _IsAdmin;
        }
        set
        {
            ViewState["IsAdmin"] = value;
            _IsAdmin = value;
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    public void LoadTabs()
    {
        string [] sites = MISCore.BusinessLayer.CorePermission.GetSites();
        foreach (string site in sites)
        {
            TabPanel tp = new TabPanel();
            tp.HeaderText = site;
            TabContainer1.Tabs.Add(tp);
        }
    }
    public void LoadTrees()
    {
        if(_User == null)
            return;
        TabPanelCollection tabs = TabContainer1.Tabs;
        foreach (TabPanel tab in tabs)
        {
            string site = tab.HeaderText;
            string[] apps = MISCore.BusinessLayer.CorePermission.GetApplications(site);
            TreeView tv1 = new TreeView();
            tv1.EnableViewState = false;
            foreach (string app in apps)
            {
                TreeNode tn1 = new TreeNode(app);
                tn1.SelectAction = TreeNodeSelectAction.None;
                string[] perms = MISCore.BusinessLayer.CorePermission.GetPermissions(site, app);
                foreach (string perm in perms)
                {
                    TreeNode tcn1 = new TreeNode(perm);
                    tcn1.SelectAction = TreeNodeSelectAction.None;
                    if (IsAdmin || _User.Manager.HasPermission(site, app, perm))
                    {
                        tcn1.ShowCheckBox = true;
                        if (_User.HasPermission(site, app, perm))
                        {
                            tcn1.Checked = true;
                        }
                        else
                        {
                            tcn1.Checked = false;
                        }
                    }
                    else
                    {
                        tcn1.ShowCheckBox = false;
                    }
                    tn1.ChildNodes.Add(tcn1);
                }
                tv1.Nodes.Add(tn1);
            }
            tab.Controls.Add(tv1);
        }

    }
    protected override void LoadViewState(object savedState)
    {
        base.LoadViewState(savedState);
        _NTLogin = (string)ViewState["NTLogin"];
        _IsAdmin = (bool)ViewState["IsAdmin"];
        if(_NTLogin != null)
            _User = new CoreUser(_NTLogin);
        TabContainer1.Tabs.Clear();
        LoadTabs();
        LoadTrees();
    }
}
[更新]
在所有上述代码之后,我遍历了treeview,它正确地存储了它们的正确状态。这是显示的一个问题。我可以成功更改任何其他属性、工具提示、文本等以显示其状态,但复选框未更新…

我将使用这些复选框查看谁正在缓存结果。通过查看请求,您将能够判断是浏览器还是服务器导致了问题。

或者您的客户端是否同意,您可以输入一个小链接按钮,上面写着“刷新”,您或用户可以在需要时强制使用此刷新树视图方法。

应该非常简单,在选项卡的参数中,只需添加EnableViewState=false。让我知道这是否适合你