Click here to Skip to main content
15,890,527 members
Articles / Web Development / HTML
Article

ASP.NET Dynamic XML Web Menu Control based on JavaScript

Rate me:
Please Sign up or sign in to vote.
4.00/5 (30 votes)
22 Sep 20052 min read 441.1K   7K   92   105
ASP.NET dynamic XML web menu control based on JavaScript.

Image 1

Introduction

This is a free web based menu (JavaScript enabled) control. There are not many web menu controls available that support dynamic menu creation and binding. This WebMenu control supports dynamic menu creation, XML menu binding and also DataSet binding. This control uses triga (free script) JavaScript menu internally. Any complex menu structure can be represented using a simple XML schema. Menu position and style can be easily applied and changed dynamically without affecting the web application.

Steps to setup WebMenu

  1. Create a new ASP.NET web project, right click on ToolBox; choose 'Add/Remove items' and add the SuperControls.WebMenu.dll reference (compile SuperControls.WebMenu.cproj to get the DLL).
  2. Copy the JS files menu_tpl.js and menu.js to the root directory of the site.
  3. Copy menu stylesheet menu.css file to the subdirectory css.
  4. Copy menudata.xml to the root directory.
  5. Create an ASPX file and drag and drop the WebMenu control to the WebForm and use one of the methods (given below) to bind the XML/dynamic data to the menu control.

ASPX Code

HTML
<cc1:WebMenu id="WebMenu1" MenuXMLPath="\\ServerName\rad\menudata.xml" 
                                        PadWidth="24" runat="server">
</cc1:WebMenu>
<!--
Other samples
//**********************************************************************
<cc1:WebMenu id="WebMenu2" MenuXMLPath="ServerName\rad\menudata.xml" 
                      ImageArrow="<img src=images\\arrow.gif border=0" 
                      PadWidth="22" runat="server">
</cc1:WebMenu>
<cc1:WebMenu id="WebMenu3" MenuXMLPath="\\ServerName\rad\menudata.xml" 
                           ImageArrow="" PadWidth="26" runat="server">
</cc1:WebMenu>
-->

Ways of binding menu items dynamically...

Method 1

Set MenuXMLPath property with the path of the XML menu file in the server.

Method 2

Create new DataSet with the XML file and bind to the web menu control.

For example:

C#
DataSet dsMenu = new DataSet();
dsMenu.ReadXml(@"\\ServerName\rad\menudata.xml");
WebMenu1.DataSource = dsMenu;

Method 3

Get the menu data from database and populate the DataSet with the following structure:

  • Column 1 : menuid (unique ID of menu item).
  • Column 2 : name (name of the menu item).
  • Column 3 : root (parent of the menu item. If it is the starting/root item then the root value will be "" else it will be the value of the parent menuid).
  • Column 4 : url (URL for the menu item).

For example:

C#
WebMenu1.DataSource = dsMenu;
// (Sample DataSet is given below.)

XML menu file (sample)

XML
<?xml version="1.0" encoding="utf-8" ?> 
<menu>
    'Level 0 nodes
    <menuitem root="" name="Search Sites" menuid="1" />
    <menuitem root="" name="Webmail Sites"  menuid="2" />
    <menuitem root="" name="DotNet Sites"  menuid="3" />
    
    'Level 1 Items
    <menuitem root="1" name="Google" url="http://www.google.com" 
                                                        menuid="11"/>
    <menuitem root="1" name="Altavista" url="http://www.Altavista.com" 
                                                        menuid="12"/>
    
    'Level 1 Items
    <menuitem root="2" name="Hot-mail" url=""  menuid="21"/>
        'Level 2 Items
        <menuitem root="21" name="Hotmail" url="http://www.hotmail.com" 
                                                          menuid="211"/>
        <menuitem root="21" name="MSN" url="http://www.MSN.com" 
                                                          menuid="212"/>
        
    <menuitem root="2" name="Yahoo" url="http://www.yahoo.com" 
                                                           menuid="22"/>
    <menuitem root="2" name="Rediff" url="http://www.rediff.com" 
                                                           menuid="23"/>
    
    'Level 1 Items
    <menuitem root="3" name="Microsoft" url="http://www.Microsoft.com" 
                                                           menuid="31"/>
    <menuitem root="3" name="GotDotNet" url="http://www.GotDotNet.com" 
                                                           menuid="32"/>
    <menuitem root="3" name="CodeProject" url="http://www.CodeProject.com" 
                                                           menuid="33"/>
    <menuitem root="3" name="ASpdotnet" url="http://www.ASpdotnet.com" 
                                                           menuid="34"/>
    
</menu>

In the above sample, the root attribute represents the parent of the menu item. The root attribute will be empty for parent/level zero menu items.

Sample dynamic menu DataSet (with one DataTable)

rootnamemenuidurl
Search Sites1
Webmail Sites2
DotNet Sites3
1Google11http://www.google.com
1Altavista12http://www.Altavista.com
2Hot-mail21
21Hotmail211http://www.hotmail.com
21MSN212http://www.MSN.com
2Yahoo22http://www.yahoo.com
2Rediff23http://www.rediff.com
3Microsoft31http://www.Microsoft.com
3GotDotNet32http://www.GotDotNet.com
3CodeProject33http://www.CodeProject.com
3ASpdotnet34http://www.ASpdotnet.com

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United Arab Emirates United Arab Emirates
Software Engineer from India,Working in .NET for 2 years.

Comments and Discussions

 
AnswerRe: Right to Left menus Pin
Moustafa Arafa3-Jan-06 21:59
Moustafa Arafa3-Jan-06 21:59 
General'menu' is undefined Pin
buning25-Oct-05 7:14
buning25-Oct-05 7:14 
GeneralRe: 'menu' is undefined Pin
tizbeth21-Jul-06 5:49
tizbeth21-Jul-06 5:49 
Questionmenuxmlpath Pin
buning25-Oct-05 6:34
buning25-Oct-05 6:34 
GeneralStyle sheet Pin
portercse9-Oct-05 11:35
portercse9-Oct-05 11:35 
GeneralDon't see anything, page is blank. Pin
Arina20056-Oct-05 6:44
Arina20056-Oct-05 6:44 
GeneralRe: Don't see anything, page is blank. Pin
Eli Shmaya7-Oct-05 20:45
Eli Shmaya7-Oct-05 20:45 
GeneralRe: Don't see anything, page is blank. Pin
Arina200512-Oct-05 5:49
Arina200512-Oct-05 5:49 
GeneralDynamic with SQL Server Pin
Jose328-Sep-05 14:36
Jose328-Sep-05 14:36 
GeneralRe: Dynamic with SQL Server Pin
ezztek3-Apr-06 8:39
ezztek3-Apr-06 8:39 
GeneralDynamic with SQL Server Pin
Member 228419528-Sep-05 14:32
Member 228419528-Sep-05 14:32 
QuestionHow Can I Use SQL Server for BackEnd? Pin
bvkdurgarao28-Sep-05 2:47
bvkdurgarao28-Sep-05 2:47 
GeneralUnable to see the menu items Pin
njppp6-Sep-05 2:03
njppp6-Sep-05 2:03 
GeneralRe: Unable to see the menu items Pin
Anupama.K30-Sep-05 21:30
Anupama.K30-Sep-05 21:30 
Generalroot element link Pin
michael_shapira3-Sep-05 1:03
michael_shapira3-Sep-05 1:03 
GeneralMenu is undefined Pin
bhaskaran_ferrari18-Aug-05 21:30
bhaskaran_ferrari18-Aug-05 21:30 
GeneralRe: Menu is undefined Pin
SreeKrishna19-Aug-05 22:47
SreeKrishna19-Aug-05 22:47 
Generalunable to use it with Database dataset Pin
slaman2-Aug-05 4:07
slaman2-Aug-05 4:07 
GeneralRe: unable to use it with Database dataset Pin
Krishna_accent2-Aug-05 17:58
Krishna_accent2-Aug-05 17:58 
Generalstill unable to use it with Database dataset Pin
slaman7-Aug-05 5:14
slaman7-Aug-05 5:14 
GeneralRe: unable to use it with Database dataset Pin
Jet Lee7-Nov-08 22:10
Jet Lee7-Nov-08 22:10 
GeneralRe: unable to use it with Database dataset Pin
hearthrob27-Sep-05 0:07
hearthrob27-Sep-05 0:07 
Generaldisable menu entries Pin
tomstl28-Jul-05 2:32
tomstl28-Jul-05 2:32 
GeneralTargeting the link Pin
27-Jul-05 1:26
suss27-Jul-05 1:26 
GeneralRe: Targeting the link Pin
Amey Marathe26-Sep-05 23:00
Amey Marathe26-Sep-05 23:00 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.