Узлы TreeView кажутся кеширующими - PullRequest
1 голос
/ 17 марта 2009

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

Итак, у нас есть 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();
    }
}

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

Ответы [ 3 ]

0 голосов
/ 17 марта 2009

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

0 голосов
/ 18 марта 2009

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

0 голосов
/ 17 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...