I'd like to populate my menu from the sitemap, utilizing the SecurityTrimmingEnabled feature, and also add some additional menu nodes from a database.
Before I added the sitemap and SecurityTrimming I was doing this to dynamically add records to my Help menu. Now it's not adding the child menus.
private void LoadHelpMenu()
{
List<HelpDocumentation> menuItems = new List<HelpDocumentation>();
menuItems = BaseUserProcess.GetHelpMenuItems();
if (menuItems != null)
{
RadMenuItem HelpMenu = radMenuNavigation.Items.Where(f => f.Text == "Help").FirstOrDefault();
HelpMenu = LoadMenuNode(menuItems, HelpMenu);
string version = typeof(WorkBench).Assembly.GetName().Version.ToString();
RadMenuItem Appversion = new RadMenuItem("Version: " + version);
HelpMenu.Items.Add(Appversion);
}
else
{
radMenuNavigation.Items.Where(f => f.Text == "Help").FirstOrDefault().Visible = false;
}
}
private RadMenuItem LoadMenuNode(List<HelpDocumentation> menuItems, RadMenuItem node, int? ParentID = null)
{
List<HelpDocumentation> GroupingItems = new List<HelpDocumentation>();
if (ParentID == null)
{
GroupingItems = menuItems.Where(F => F.ParentID.HasValue == false).ToList();
}
else
{
GroupingItems = menuItems.Where(F => F.ParentID == ParentID).ToList();
}
foreach (var item in GroupingItems.OrderBy(F => F.DisplayDescription).ToList())
{
RadMenuItem i = new RadMenuItem(item.DisplayDescription);
if (!string.IsNullOrEmpty(item.Link))
i.NavigateUrl = item.Link;
if (!string.IsNullOrEmpty(item.Target))
i.Target = item.Target;
if (menuItems.Any(F => F.ParentID == item.ID))
i = LoadMenuNode(menuItems, i, item.ID);
node.Items.Add(i);
}
return node;
}