简体   繁体   中英

Generate menu dynamically using c# in asp.net with css for parent and sub menu

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);

    }

endregion

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM