Узлы TreeView кэшируются

Я создаю пользовательский веб-элемент управления в С#. Он предназначен для взаимодействия с иерархией разрешений. У нас есть разные «сайты», и на каждом сайте есть много «приложений», и у каждого приложения есть много «разрешений».

Итак, у нас есть TabPanel, который загружает вкладку для каждого сайта. Затем на каждой вкладке у нас есть TreeView, где родительские узлы — это приложения, а внутренние узлы — разрешения.

Разрешения показывают флажки на основе некоторых критериев и проверяются в зависимости от того, возвращает ли функция 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();
    }
}

[ОБНОВЛЕНИЕ] Я перебираю древовидную структуру после всего приведенного выше кода, он правильно сохраняет их правильный статус. Это проблема с отображением. Я могу успешно изменить любое другое свойство, всплывающую подсказку, текст и т. д., чтобы отобразить их состояние, но флажки не обновляются...


person Community    schedule 17.03.2009    source источник


Ответы (3)


Я бы использовал Fiddler, чтобы узнать, кто кэширует результаты. Просмотрев запросы, вы сможете определить, является ли причиной проблемы браузер или сервер.

person David    schedule 17.03.2009

Или, если с вашим клиентом все в порядке, вы можете добавить небольшую кнопку ссылки с надписью «Обновить», и либо вы, либо пользователь можете принудительно использовать этот метод обновления дерева, когда это необходимо.

person Nidhi    schedule 17.03.2009

Должно быть довольно просто, в параметрах вкладки просто добавьте EnableViewState = false. Дайте мне знать, если это работает для вас.

person Community    schedule 18.03.2009