I generate following structure for menu dynamically using recursive function.
<ul >
<li><a href="/en/">Home</a></li>
<li><a href="/en/">Menu 1</a></li>
<li><a href="/en/menu2/">Menu 2</a>
<ul>
<li><a href="">Menu 2.1</a></li>
<li><a href="">Menu 2.2</a></li>
</ul>
</li>
<li><a href="/en/menu3/">Menu 3</a></li>
<li><a href="/en/menu4/">Menu 4</a></li>
<li><a href="/en/menu5">Menu 5</a>
<ul >
<li><a href="">Menu 5.1</a></li>
<li><a href="">Menu 5.2</a></li>
</ul>
</li>
<li><a href="/en/menu6/">Menu 6</a></li>
</ul>
I want to generate same with saperate class for parent menu & sub menu as
<ul class="nav parent-menu">
<li><a href="/en/">Home</a></li>
<li><a href="/en/">Menu 1</a></li>
<li class="dropdown" ><a href="/en/menu2/">Menu 2</a>
<ul class="sub-menu">
<li><a href="">Menu 2.1</a></li>
<li><a href="">Menu 2.2</a></li>
</ul>
</li>
<li><a href="/en/menu3/">Menu 3</a></li>
<li><a href="/en/menu4/">Menu 4</a></li>
<li class="dropdown"><a href="/en/menu5">Menu 5</a>
<ul class="sub-menu">
<li><a href="">Menu 5.1</a></li>
<li><a href="">Menu 5.2</a></li>
</ul>
</li>
<li><a href="/en/menu6/">Menu 6</a></li>
</ul>
I need to add three different classes nav parent-menu
class="dropdown"
class="sub-menu"
C# Code Not sure where i should should change the code to make it work.
private string GenerateMenu(DataRow[] menu, DataTable table, StringBuilder sb)
{
sb.AppendLine("<ul class='nav navbar-nav'>");
if (menu.Length > 0)
{
foreach (DataRow dr in menu)
{
string menuName = dr["MenuName"].ToString();
string menuURL = dr["MenuURL"].ToString();
string line = string.Empty;
line = String.Format(@"<li><a href=" + menuURL + ">" + menuName + "</a>", handler, menuName);
sb.Append(line);
string pid = dr["MenuId"].ToString();
string parentId = dr["MenuInheritance"].ToString();
DataRow[] subMenu = table.Select(String.Format("MenuInheritance = {0}", pid));
if (subMenu.Length > 0 && !pid.Equals(parentId))
{
var subMenuBuilder = new StringBuilder();
sb.Append(GenerateMenu(subMenu, table, subMenuBuilder));
}
sb.Append("</li>");
}
}
sb.Append("</ul>");
return sb.ToString();
}
//Call Function
GenerateMobileUL(parentMenus, table, sbMobile);
Table Structure
MenuID
MenuName
MenuURL
MenuInheritance
MenuNewPage
Copy And Paste and name it as Menu.css
#cssmenu { position: relative; background:#DCDCDC; width:100%; } #cssmenu ul { list-style: none; padding: 0; margin: 0; line-height: 1; } #cssmenu > ul { position: relative; display: block; background:Skyblue; width: 100%; } #cssmenu:after, #cssmenu > ul:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; } #cssmenu.align-right > ul > li { float: right; } #cssmenu.align-center ul { text-align: center; } #cssmenu.align-center ul ul { text-align: left; } #cssmenu > ul > li { display: inline-block; position: relative; margin: 0; padding: 0; } #cssmenu > ul > #menu-button { display: none; } #cssmenu ul li a { display: block; font-family:Times New Roman; text-decoration: none; } #cssmenu > ul > li > a { font-size: 16px; font-weight: bold; padding: 15px 10px; color: Black; text-transform: uppercase; -webkit-transition: color 0.25s ease-out; -moz-transition: color 0.25s ease-out; -ms-transition: color 0.25s ease-out; -o-transition: color 0.25s ease-out; transition: color 0.25s ease-out; } #cssmenu > ul > li.has-sub > a { padding-right: 32px; } #cssmenu > ul > li:hover > a { color: #ffffff; } #cssmenu li.has-sub::after { display: block; content: ""; position: absolute; width: 0; height: 0; } #cssmenu > ul > li.has-sub::after { right: 10px; top: 20px; border: 5px solid transparent; border-top-color: #7a8189; } #cssmenu > ul > li:hover::after { border-top-color: #ffffff; } #indicatorContainer { position: absolute; height: 12px; width: 100%; bottom: 0px; overflow: hidden; z-index: -1; } #pIndicator { position: absolute; height: 0; width: 100%; border: 12px solid transparent; border-top-color: #2b2f3a; z-index: -2; -webkit-transition: left .25s ease; -moz-transition: left .25s ease; -ms-transition: left .25s ease; -o-transition: left .25s ease; transition: left .25s ease; } #cIndicator { position: absolute; height: 0; width: 100%; border: 12px solid transparent; border-top-color: #2b2f3a; top: -12px; right: 100%; z-index: -2; } #cssmenu ul ul { position: absolute; left: -9999px; top: 70px; opacity: 0; -webkit-transition: opacity .3s ease, top .25s ease; -moz-transition: opacity .3s ease, top .25s ease; -ms-transition: opacity .3s ease, top .25s ease; -o-transition: opacity .3s ease, top .25s ease; transition: opacity .3s ease, top .25s ease; z-index: 1000; } #cssmenu ul ul ul { top: 37px; padding-left: 5px; } #cssmenu ul ul li { position: relative; } #cssmenu > ul > li:hover > ul { left: auto; top: 44px; opacity: 1; } #cssmenu.align-right > ul > li:hover > ul { left: auto; right: 0; opacity: 1; } #cssmenu ul ul li:hover > ul { left: 170px; top: 0; opacity: 1; } #cssmenu.align-right ul ul li:hover > ul { left: auto; right: 170px; top: 0; opacity: 1; padding-right: 5px; } #cssmenu ul ul li a { width: 130px; border-bottom: 0.5px solid #eeeeee; padding: 10px 20px; font-size: 14px; color: Black; background:#DCDCDC; -webkit-transition: all .35s ease; -moz-transition: all .35s ease; -ms-transition: all .35s ease; -o-transition: all .35s ease; transition: all .35s ease; } #cssmenu.align-right ul ul li a { text-align: right; } #cssmenu ul ul li:hover > a { background: #f2f2f2; color: #8c9195; } #cssmenu ul ul li:last-child > a, #cssmenu ul ul li.last > a { border-bottom: 0; } #cssmenu > ul > li > ul::after { content: ''; border: 6px solid transparent; width: 0; height: 0; border-bottom-color: #ffffff; position: absolute; top: -12px; left: 30px; } #cssmenu.align-right > ul > li > ul::after { left: auto; right: 30px; } #cssmenu ul ul li.has-sub::after { border: 4px solid transparent; border-left-color: #9ea2a5; right: 10px; top: 12px; -moz-transition: all .2s ease; -ms-transition: all .2s ease; -o-transition: all .2s ease; transition: all .2s ease; -webkit-transition: -webkit-transform 0.2s ease, right 0.2s ease; } #cssmenu.align-right ul ul li.has-sub::after { border-left-color: transparent; border-right-color: #9ea2a5; right: auto; left: 10px; } #cssmenu ul ul li.has-sub:hover::after { border-left-color: #ffffff; right: -5px; -webkit-transform: rotateY(180deg); -ms-transform: rotateY(180deg); -moz-transform: rotateY(180deg); -o-transform: rotateY(180deg); transform: rotateY(180deg); } #cssmenu.align-right ul ul li.has-sub:hover::after { border-right-color: #ffffff; border-left-color: transparent; left: -5px; -webkit-transform: rotateY(180deg); -ms-transform: rotateY(180deg); -moz-transform: rotateY(180deg); -o-transform: rotateY(180deg); transform: rotateY(180deg); } @media all and (max-width: 800px), only screen and (-webkit-min-device-pixel-ratio: 2) and (max-width: 1024px), only screen and (min--moz-device-pixel-ratio: 2) and (max-width: 1024px), only screen and (-o-min-device-pixel-ratio: 2/1) and (max-width: 1024px), only screen and (min-device-pixel-ratio: 2) and (max-width: 1024px), only screen and (min-resolution: 192dpi) and (max-width: 1024px), only screen and (min-resolution: 2dppx) and (max-width: 1024px) { #cssmenu { width: auto; } #cssmenu.align-center ul { text-align: left; } #cssmenu.align-right > ul > li { float: none; } #cssmenu ul { width: auto; } #cssmenu .submenuArrow, #cssmenu #indicatorContainer { display: none; } #cssmenu > ul { height: auto; display: block; } #cssmenu > ul > li { float: none; } #cssmenu li, #cssmenu > ul > li { display: none; } #cssmenu ul ul, #cssmenu ul ul ul, #cssmenu ul > li:hover > ul, #cssmenu ul ul > li:hover > ul, #cssmenu.align-right ul ul, #cssmenu.align-right ul ul ul, #cssmenu.align-right ul > li:hover > ul, #cssmenu.align-right ul ul > li:hover > ul { position: relative; left: auto; top: auto; opacity: 1; padding-left: 0; padding-right: 0; right: auto; } #cssmenu ul .has-sub::after { display: none; } #cssmenu ul li a { padding: 12px 20px; } #cssmenu ul ul li a { border: 0; background: none; width: auto; padding: 8px 35px; } #cssmenu.align-right ul ul li a { text-align: left; } #cssmenu ul ul li:hover > a { background: none; color: #8c9195; } #cssmenu ul ul ul a { padding: 8px 50px; } #cssmenu ul ul ul ul a { padding: 8px 65px; } #cssmenu ul ul ul ul ul a { padding: 8px 80px; } #cssmenu ul ul ul ul ul ul a { padding: 8px 95px; } #cssmenu > ul > #menu-button { display: block; cursor: pointer; } #cssmenu #menu-button > a { padding: 12px 20px; } #cssmenu ul.open li, #cssmenu > ul.open > li { display: block; } #cssmenu > ul.open > li#menu-button > a { color: #fff; border-bottom: 0.5px solid rgba(150, 150, 150, 0.1); } #cssmenu ul ul::after { display: none; } #cssmenu #menu-button::after { display: block; content: ''; position: absolute; height: 3px; width: 22px; border-top: 0px solid #7a8189; border-bottom: 0px solid #7a8189; right: 20px; top: 15px; } #cssmenu #menu-button::before { display: block; content: ''; position: absolute; height: 3px; width: 22px; border-top: 0px solid #7a8189; right: 20px; top: 25px; } #cssmenu ul.open #menu-button::after, #cssmenu ul.open #menu-button::before { border-color: #fff; } }
In form
<table width="100%">
<td style="width: 200px" valign="top">
<div id="cssmenu">
<ul id="">
<li><a href="#"><span>Admin</span></a>
<ul>
<li><a href="">Test1</a></li>
</ul>
</li>
<li><a href="#"><span>Master</span></a>
<ul>
<li><a href="">test2</a></li>
</ul>
</li>
<li class="dropdown"><a href="#"><span>test</span></a>
<ul>
<li><a href="">Test2</a>
<ul>
<li><a href="">Test2-test</a>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</td>
</table>
Use For Has Sub else Avoid
<script>
(function($) {
$(document).ready(function() {
$('#cssmenu').prepend('<div id="indicatorContainer"><div id="pIndicator"><div id="cIndicator"></div></div></div>');
var activeElement = $('#cssmenu>ul>li:first');
$('#cssmenu>ul>li').each(function() {
if ($(this).hasClass('active')) {
activeElement = $(this);
}
});
var posLeft = activeElement.position().left;
var elementWidth = activeElement.width();
posLeft = posLeft + elementWidth / 2 - 6;
if (activeElement.hasClass('has-sub')) {
posLeft -= 6;
}
$('#cssmenu #pIndicator').css('left', posLeft);
var element, leftPos, indicator = $('#cssmenu pIndicator');
$("#cssmenu>ul>li").hover(function() {
element = $(this);
var w = element.width();
if ($(this).hasClass('has-sub')) {
leftPos = element.position().left + w / 2 - 12;
}
else {
leftPos = element.position().left + w / 2 - 6;
}
$('#cssmenu #pIndicator').css('left', leftPos);
}
, function() {
$('#cssmenu #pIndicator').css('left', posLeft);
});
$('#cssmenu>ul').prepend('<li id="menu-button"><a>Menu</a></li>');
$("#menu-button").click(function() {
if ($(this).parent().hasClass('open')) {
$(this).parent().removeClass('open');
}
else {
$(this).parent().addClass('open');
}
});
});
})(jQuery);
</script>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">Page Permission Comfig Form</div>
<div class="panel-body">
<div class="row">
<div class="form-group">
<div class="col-lg-4 col-md-4 col-sm-4">
<label>User Type
<select id="txtusertype" class="form-control">
<option value="ALL">Select user type</option>
</select>
</label>
</div>
<div class="col-lg-12 col-md-12 col-sm-12" >
<div class="col-lg-12 col-md-12 col-sm-12" id="getlist">
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12">
<input type="button" class="btn btn-success " value="Save" onclick="SaveRecords();" />
</div>
<asp:HiddenField ID="MailMenuList" runat="server" ClientIDMode="Static" />
<asp:HiddenField ID="SubMenuList" runat="server" ClientIDMode="Static"/>
</div>
</div>
</div>
</div>
</div>
//page load function
$(document).ready(function () {
getusertype();
GetPagNameAll();
})
//get all page name in db menu and sub menu type display
function GetPagNameAll() {
$.ajax({
type: "POST",
url: "/PagePermission/PagePermission.aspx/getDisplayALLPageName",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
var jsdata = JSON.parse(msg.d);
// var SubMenu = jsdata.SubMenuList;
$.each(jsdata, function (key, value) {
$("#MailMenuList").val(value.mainmenulist);
$("#getlist").append('<ul style="padding:5px"><li><input type="checkbox" id="main' + value.id + '" value="' + value.id + '" onclick="Maincheck_fun(' + value.id + ');"/>' + value.pagename)//onclick="checkSubMenufun(' + value.id + ');" onclick="check_fun(\'' + value.id + ',' + value.SubMenuList +'\');"
//'<ul><input type="checkbox" id="' + value.id + '" value="' + value.pagename + '" />"' + value.pagename+'"'
var sub_length=value.SubMenuList.length;
for (i = 0; i < sub_length; i++) {
//'<li><input type="checkbox" id="' + value.id + '" value="' + value.pagename + '" />"' + value.pagename+'"</li>'
$("#getlist").append('<ul><li><input type="checkbox" id="sub' + value.SubMenuList[i].id + '" class="cl_name' + value.id + '" value="' + value.SubMenuList[i].id + '" onclick="Subcheck_fun(' + value.id + ',' + value.SubMenuList[i].id + ');"/>' + value.SubMenuList[i].pagename + '</li><ul>')//onclick="checkUncheckMainMenufun(' + value.id + ',' + value.SubMenuList[i].id + ');"
}
'<li></ul>';
});
},
failure: function (msg) {
alert("failure");
},
error: function (msg) {
alert("error");
}
});
}
//get drop down values in db
function getusertype() {
$.ajax({
type: "POST",
url: "/PagePermission/PagePermission.aspx/GetUserType",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$('#txtusertype').empty().append('<option value="ALL">Select user type</option>');
var jsdata = JSON.parse(msg.d);
$.each(jsdata, function (key, value) {
$('#txtusertype').append('<option value="' + value.Sno + '">' + value.pagename + '</option>');
});
//$(".side-menu").empty();
},
failure: function (msg) {
alert("failure");
},
error: function (msg) {
alert("error");
}
});
}
#region Select Drobdowm List
[WebMethod]
public static string GetUserType()
{
try
{
registerEntities1 db = new registerEntities1();
var usertype = db.user_type_table.Select(x => new { x.user_id, x.user_name }).ToList();
List<details> obj = new List<details>();
foreach (var append in usertype)
{
details objd = new details();
objd.pagename = append.user_name;
objd.Sno = append.user_id.ToString();
obj.Add(objd);
}
JavaScriptSerializer objsr = new JavaScriptSerializer();
return objsr.Serialize(obj);
//return "";
}
catch (Exception ex)
{
return "";
}
}
#endregion
#region display all page name in page load
[WebMethod]
public static string getDisplayALLPageName()
{
registerEntities1 db = new registerEntities1();
var main_menu_list = db.page_name_table.Select(x => new { x.page_id, x.page_name }).ToList();
var sub_menu_list = db.page_name_submenu.Select(x => new { x.page_id, x.page_name, x.main_menu_id }).ToList();
List<mainMenu> MainMenuList = new List<mainMenu>();
foreach (var main_menu in main_menu_list)
{
List<subMenu> SubMenuList = new List<subMenu>();
mainMenu mainMenuDetails = new mainMenu();
foreach (var sub_menu in sub_menu_list)
{
subMenu sunMenuDetails = new subMenu();
if (main_menu.page_id == sub_menu.main_menu_id)
{
sunMenuDetails.id = sub_menu.page_id.ToString();
sunMenuDetails.pagename = sub_menu.page_name;
sunMenuDetails.menutype = "Sub menu";
//sunMenuDetails.submenulist = sub_menu_list.Count.ToString();
SubMenuList.Add(sunMenuDetails);
}
}
mainMenuDetails.id = main_menu.page_id.ToString();
mainMenuDetails.pagename = main_menu.page_name;
mainMenuDetails.menutype = "main Menu";
mainMenuDetails.SubMenuList = SubMenuList;
mainMenuDetails.mainmenulist = main_menu_list.Count.ToString();
MainMenuList.Add(mainMenuDetails);
}
JavaScriptSerializer objsr = new JavaScriptSerializer();
return objsr.Serialize(MainMenuList);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.