Hi mmk90,
I have created a sample which full fill your requirement you need to modify the code according to your need
Refer below sample
SQL
CREATE TABLE [dbo].[Menus](
[MenuId] [int] NULL,
[ParentMenuId] [int] NOT NULL,
[Title] [varchar](100) NULL,
[Description] [varchar](100) NULL,
[Url] [nvarchar](100) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[Menus] ([MenuId], [ParentMenuId], [Title], [Description], [Url]) VALUES (1, 0, N'Home', NULL, N'~/Home.aspx')
INSERT [dbo].[Menus] ([MenuId], [ParentMenuId], [Title], [Description], [Url]) VALUES (2, 0, N'Services', N'Services Page', N'javascript:;')
INSERT [dbo].[Menus] ([MenuId], [ParentMenuId], [Title], [Description], [Url]) VALUES (3, 2, N'Consulting', N'Consulting Page', N'~/Consulting.aspx')
INSERT [dbo].[Menus] ([MenuId], [ParentMenuId], [Title], [Description], [Url]) VALUES (4, 2, N'Outsourcing', N'Outsourcing Page', N'~/Outsourcing.aspx')
INSERT [dbo].[Menus] ([MenuId], [ParentMenuId], [Title], [Description], [Url]) VALUES (5, 0, N'About', N'About Us Page', N'~/About.aspx')
INSERT [dbo].[Menus] ([MenuId], [ParentMenuId], [Title], [Description], [Url]) VALUES (6, 0, N'Contact', N'Contact Us Page', N'~/Contact.aspx')
INSERT [dbo].[Menus] ([MenuId], [ParentMenuId], [Title], [Description], [Url]) VALUES (7, 0, N'Test Module', N'Test Module', N'javascript:;')
INSERT [dbo].[Menus] ([MenuId], [ParentMenuId], [Title], [Description], [Url]) VALUES (8, 7, N'Test One', N'Test One Page', N'~/TestOne.aspx')
INSERT [dbo].[Menus] ([MenuId], [ParentMenuId], [Title], [Description], [Url]) VALUES (9, 7, N'Test Two', N'Test Two Page', N'~/TestTwo.aspx')
Main.master
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Main.master.cs" Inherits="Main" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<link rel="stylesheet" href='http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css'
media="screen" />
<script type="text/javascript" src='http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js'></script>
<script type="text/javascript" src='http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/js/bootstrap.min.js'></script>
<div class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span><span
class="icon-bar"></span><span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">ASPSnippets</a>
</div>
<div class="collapse navbar-collapse pull-right" id="bs-example-navbar-collapse-1">
<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal" RenderingMode="List"
IncludeStyleBlock="false" StaticMenuStyle-CssClass="nav navbar-nav" DynamicMenuStyle-CssClass="dropdown-menu">
</asp:Menu>
</div>
</div>
</div>
<script type="text/javascript">
//Disable the default MouseOver functionality of ASP.Net Menu control.
Sys.WebForms.Menu._elementObjectMapper.getMappedObject = function () {
return false;
};
$(function () {
$(".navbar-nav li, .navbar-nav a, .navbar-nav ul").removeAttr('style');
$(".dropdown-menu").closest("li").removeClass().addClass("dropdown-toggle");
$(".dropdown-toggle").find("a[href='javascript:;']").attr("data-toggle", "dropdown");
$(".dropdown-toggle").find("a[href='javascript:;'].level1").append("<span class='caret'></span>");
$(".dropdown-toggle").find("a[href='javascript:;']:not(.level1)").closest('li').addClass('dropdown-submenu');
$("a.selected").closest("li").addClass("active");
$("a.selected").closest(".dropdown-toggle").addClass("active");
$('ul.dropdown-menu [data-toggle=dropdown]').on('click', function (event) {
event.preventDefault();
event.stopPropagation();
$(this).parent().siblings().removeClass('open');
$(this).parent().toggleClass('open');
});
});
</script>
<hr />
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</form>
</body>
</html>
Main.master.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = this.GetData();
PopulateMenu(dt);
}
}
private DataTable GetData()
{
string query = "SELECT [MenuId],ParentMenuId, [Title], [Description], [Url] FROM [Menus]";
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
DataTable dt = new DataTable();
using (SqlCommand cmd = new SqlCommand(query))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
sda.SelectCommand = cmd;
sda.Fill(dt);
}
}
return dt;
}
}
private void PopulateMenu(DataTable dt)
{
string currentPage = Path.GetFileName(Request.Url.AbsolutePath);
DataView view = new DataView(dt);
view.RowFilter = "ParentMenuId=0";
view.Sort = "MenuId DESC";
foreach (DataRowView row in view)
{
MenuItem menuItem = new MenuItem
{
Value = row["MenuId"].ToString(),
Text = row["Title"].ToString(),
NavigateUrl = row["Url"].ToString(),
Selected = row["Url"].ToString().EndsWith(currentPage, StringComparison.CurrentCultureIgnoreCase)
};
Menu1.Items.Add(menuItem);
AddChildItems(dt, menuItem);
}
}
private void AddChildItems(DataTable table, MenuItem menuItem)
{
DataView viewItem = new DataView(table);
viewItem.RowFilter = "ParentMenuId=" + menuItem.Value;
foreach (DataRowView childView in viewItem)
{
MenuItem childmenuItem = new MenuItem
{
Value = childView["MenuId"].ToString(),
Text = childView["Title"].ToString(),
NavigateUrl = childView["Url"].ToString(),
};
menuItem.ChildItems.Add(childmenuItem);
AddChildItems(table, childmenuItem);
}
}
ScreenShot
