Make a dynamic menu using C# MVC.
CREATE TABLE [dbo].[MenuItems]( [MenuItem] [smallint] IDENTITY(1,1) NOT NULL, [ParentId] [smallint] NOT NULL, [SubParentId] [smallint] NOT NULL, [PageId] [int] NOT NULL, [MenuText] [varchar](50) NULL, [MenuUrl] [varchar](50) NULL) }
public class MenuEntity
{
public short MenuItem;
public short ParentId;
public short SubParentId;
public int PageId;
public string MenuText;
public string MenuUrl;
public string PageUrl;
}
public MvcHtmlString CreateMenu() { }
string cacheName = "menu";
string menu = (string)HttpContext.Current.Cache[cacheName];
if (!string.IsNullOrWhiteSpace(menu))
{
return new MvcHtmlString(menu);
}
else
{
//create menu
}
var MenuItems = new MenuRepository().GetMenuItems(); var primaryLevels = MenuItems.Where(m => m.ParentId == 0 && m.SubParentId == 0);
foreach (MenuEntity primaryEntity in primaryLevels)... string url = (primaryEntity.MenuUrl != null) ? primaryEntity.MenuUrl : primaryEntity.PageUrl; html.Append("<ul class=\"menu-top-ul\">"); html.Append("<li><h2><a href=\"/" + url + "\">" + primaryEntity.MenuText + "</a></h2>");
var secondaryLevels = MenuItems.Where(m => m.ParentId == primaryEntity.MenuItem && m.SubParentId == 0);
foreach (MenuEntity secondaryEntity in secondaryLevels)...
url = (primaryEntity.MenuUrl != null) ? primaryEntity.MenuUrl : primaryEntity.PageUrl;
url += "/" + ((secondaryEntity.MenuUrl != null) ? secondaryEntity.MenuUrl : secondaryEntity.PageUrl);
html.Append("<li><a href=\"/" + url + "\">" + secondaryEntity.MenuText + "</a>");
var tertiaryLevels = MenuItems.Where(m => m.ParentId == primaryEntity.MenuItem && m.SubParentId == secondaryEntity.MenuItem);
if (tertiaryLevels.Count() > 0)
{
html.Append("<ul>");
foreach (MenuEntity tertiaryEntity in tertiaryLevels){
url = (tertiaryEntity.MenuUrl != null) ? tertiaryEntity.MenuUrl : tertiaryEntity.PageUrl;
if (!string.IsNullOrEmpty(secondaryEntity.MenuUrl)){
html.Append("<li><a href=\"/" + primaryEntity.MenuUrl
+ "/" + secondaryEntity.MenuUrl + "/" + url + "\">"
+ tertiaryEntity.MenuText + "</a></li>");
}
else {
html.Append("<li><a href=\"/" + primaryEntity.MenuUrl + "/"
+ url + "\">" + tertiaryEntity.MenuText + "</a></li>");
}
}
html.Append("</ul>");
}
public MvcHtmlString CreateMenu()
{
string cacheName = "menu";
string menu = Helpers.IsDevelopment ? null : (string)HttpContext.Current.Cache[cacheName];
if (!string.IsNullOrWhiteSpace(menu))
{
return new MvcHtmlString(menu);
}
else
{
var html = new StringBuilder();
IEnumerable<MenuEntity> MenuItems = new MenuRepository().GetMenuItems();
IEnumerable<MenuEntity> primaryLevels = MenuItems.Where(m => m.ParentId == 0 && m.SubParentId == 0);
string url = "";
foreach (MenuEntity primaryEntity in primaryLevels)
{
url = (primaryEntity.MenuUrl != null) ? primaryEntity.MenuUrl : primaryEntity.PageUrl;
html.Append("<ul class=\"menu-top-ul\">");
html.Append("<li><h2><a href=\"/" + url + "\">" + primaryEntity.MenuText + "</a></h2>");
IEnumerable<MenuEntity> secondaryLevels = MenuItems.Where(m => m.ParentId == primaryEntity.MenuItem && m.SubParentId == 0);
if (secondaryLevels.Count() > 0)
{
html.Append("<ul>");
foreach (MenuEntity secondaryEntity in secondaryLevels)
{
url = (primaryEntity.MenuUrl != null) ? primaryEntity.MenuUrl : primaryEntity.PageUrl;
url += "/" + ((secondaryEntity.MenuUrl != null) ? secondaryEntity.MenuUrl : secondaryEntity.PageUrl);
html.Append("<li><a href=\"/" + url + "\">" + secondaryEntity.MenuText + "</a>");
IEnumerable<MenuEntity> tertiaryLevels = MenuItems.Where(m => m.ParentId == primaryEntity.MenuItem && m.SubParentId == secondaryEntity.MenuItem);
if (tertiaryLevels.Count() > 0)
{
html.Append("<ul>");
foreach (MenuEntity tertiaryEntity in tertiaryLevels)
{
url = (tertiaryEntity.MenuUrl != null) ? tertiaryEntity.MenuUrl : tertiaryEntity.PageUrl;
if (!string.IsNullOrEmpty(secondaryEntity.MenuUrl))
{
html.Append("<li><a href=\"/" + primaryEntity.MenuUrl + "/" + secondaryEntity.MenuUrl + "/" + url + "\">" + tertiaryEntity.MenuText + "</a></li>");
}
else
{
html.Append("<li><a href=\"/" + primaryEntity.MenuUrl + "/" + url + "\">" + tertiaryEntity.MenuText + "</a></li>");
}
}
html.Append("</ul>");
}
html.Append("</li>");
}
html.Append("</ul>");
}
html.Append("</li>");
html.Append("</ul>");
}
if (html.Length > 0)
{
HttpContext.Current.Cache.Insert(cacheName, html.ToString(), null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(60));
}
return new MvcHtmlString(html.ToString());
}
}