Кэширование ASP.NET Menu control - PullRequest
0 голосов
/ 15 марта 2012

Я использую System.Web.UI.WebControls.Menu для создания и представления пользовательского меню. Загрузка меню требует значительной активности базы данных и занимает около 1,4 секунды, поэтому я ищу способы кэширования меню при поворотах страницы. Если я сохраню SessionVariable ["ThisMenu"], который содержит элемент управления меню, значение ThisMenu будет правильным при поворотах страницы; однако я не могу установить фактический элемент управления на странице успешно.

Если я попробую этот код, он скомпилируется и выполнится, но в выводе HTML ничего не появится:

System.Web.UI.WebControls.Menu ctlMasterMenu = (System.Web.UI.WebControls.Menu)GetControl("ctlMasterMenu");
if (ctlMasterMenu != null)
{
    if (ThisMenu != null)
    {
        ctlMasterMenu = ThisMenu;
    }
    else
    {
        LoadPageMenu((System.Web.UI.WebControls.Menu)ctlMasterMenu); // Sets ThisMenu
    }
}

If I try this code, it executes, but as it adds a MenuItem to ctlMasterMenu, it removes the item from ThisMenu. The result is that after a few page turns, the menu is empty.

System.Web.UI.WebControls.Menu ctlMasterMenu = (System.Web.UI.WebControls.Menu)GetControl("ctlMasterMenu");
if (ctlMasterMenu != null)
{
    if (ThisMenu != null)
    {
        List<MenuItem> items = new List<MenuItem>();
        for (int i = 0; i < ThisMenu.Items.Count; i++)
        {
            items.Add(ThisMenu.Items[i]);
        }
        ctlMasterMenu.Items.Clear();
        foreach (MenuItem item in items)
        {
            ctlMasterMenu.Items.Add(item); // Causes item to be removed from ThisMenu
        }
    }
    else
    {
        LoadPageMenu((System.Web.UI.WebControls.Menu)ctlMasterMenu);
    }
}

Должен быть простой способ, который работает.

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Сохранение фактических данных, которые составляют меню, в кеше и построение меню каждый раз из этих кэшированных данных. Отключите viewstate, чтобы сэкономить на производительности. Не храните меню или сами пункты меню.

1 голос
/ 22 марта 2012

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

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