Я использую 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);
}
}
Должен быть простой способ, который работает.