• Github | Live Demo
    • Sign In
    mojoPortal CMS
    • Plugins
      • Form Wizard Pro
      • Event Calendar Pro
      • Site Membership Pro
      • Web Invoice Pro
      • Fund Raiser Pro
      • Installation Service
    • Forums
      • Installing & Upgrading
      • Site Administration
      • Developer Forum
      • Design & Skinning
      • SuperFlexi
      • More Forums
    • Blog
    • About
      • Features
      • Contact Us
      • Report a Vulnerability
      • Contribute
    • Paid Services
      • Hosting
        • Shared Hosting
        • Dedicated Hosting
      • Paid Support
        • Paid Support Ticket
        • Support Plans
      • mojoPortal Training
    • Docs
      • Install & Admin
        • Installation Quick Start
          • Installing mojoPortal on IIS
            • How to get multiple IIS web sites working on your development machine
          • Migrating mojoPortal to a New Server
        • Hosting Requirements
        • Database Configuration
        • Upgrading
        • Basic Troubleshooting
          • mojoPortal System Log
        • Email Configuration
          • Sending Bulk Email
        • E-commerce
          • Using Authorize.NET
          • Using PayPal Standard
          • Using PayPal Website Payments Pro
          • Using PayPal Express Checkout
          • Using PlugNPay
          • Using WorldPay
        • Managing Pages
          • How To Make a Page Link To a Child Page
          • Linking to External or Existing Pages
          • Renaming Pages and Changing Page Urls
        • Adding Content to Pages
          • Publishing the Same Content on Multiple Pages
            • Same Content on All Pages With Module Wrapper
        • Content Versioning
        • Content Workflow
        • Search Engine Optimization
          • Google Analytics Integration
            • Tracking Outbound Link Clicks
            • Using The Async Google Analytics Controls
          • Submitting Your Site Maps to Search Engines
          • Page Title Format
          • Extensionless Urls
          • 301 Redirects
          • Custom Meta Data
          • Optimizing Your Home Page Url for SEO
        • Advanced Configuration
          • Running in Medium Trust
          • Web.config Guide
            • Sample user.config
            • Using Separate Files for Config Sections
          • Using a Canonical Domain or Host Name
          • Supporting Large File Uploads
          • Using NeatUpload for Multiple File Upload with a Progress Bar
          • CDN Configuration
        • Localization
        • Accessibility
        • Creating a Registration Agreement
        • Capacity Planning
        • Site Search
          • Rebuilding the Search Index
        • Self Hosting jQuery
        • Creating Content Templates
        • Creating Content Style Templates
        • Controlling jQuery & jQuery UI Versions
        • Customizing the 404 Page Not Found Page
        • Adding a Facebook Profile Widget to your site
        • Multi-Tenancy
          • Using Host Names
          • Using Folders
          • Using Related Sites Mode
        • Web Farms and Clusters
          • Overview - Scaling Out vs Scaling Up
          • Implementation Considerations for Web Farms
          • Windows Azure
            • Overview of the Windows Azure Platform
            • Using a Synchronization Framework to Run mojoPortal on Azure
              • Create a Windows Azure Storage Account
              • Deploy the Azure Host to Windows Azure
              • Create a SqlAzure Database
              • Create Windows Azure AppFabric Cache
              • Preparing a Local Copy of mojoPortal for Deployment
              • Uploading mojoPortal Files to Azure Blob Storage
        • Using Open Live Writer to Manage Pages
      • Design and Skinning
        • Upgrading Skins
        • Supporting Tablets and Phones
        • Customizing Framework with Bootswatch
        • Understanding the Layout.master File
          • UserControls as Include Files
            • The SlidePanel User Control
          • Showing Side Columns Even When They Have No Content
          • Using Images in layout.master
          • How The Main Column Layout Works
        • Understanding The style.config File
        • Understanding the CSS Files
        • Using the theme.skin File
          • Styling Facebook Comments
          • Blog Display Settings
          • Login Module Display Settings
          • Member List Display Settings
          • Forum Display Settings
          • Layout Display Settings
          • Registration Page Display Settings
          • WebStore Display Settings
          • Child Page Site Map Display Settings
          • Image Gallery Display Settings
          • Feed Manager Display Settings
          • Shared Files Display Settings
          • Event Calendar Pro Display Settings
          • Form Wizard Pro Display Settings
          • Miscellaneous Other theme.skin settings
          • Search Results Display Settings
          • Fund Raiser Pro Display Settings
        • Styling Menus
          • Menu Structure and Properties
            • Multiple Horizontal Menus
          • Menu Types
          • Unclickable Menu Items
          • The Trouble With ASP.NET Menu
          • Custom Menu CSS Classes
          • FlexMenu
          • Mobile Kit Pro - MobileMenu
        • Skinning Tips
          • Different Styles For Different Features
          • Styling the Search Input Box
          • Using Wireframe Skins
          • How To Make a Side Column Wider On Some Pages
          • A More Flexible Set of Container Panels
          • Customizing Labels and Buttons
          • Customizing the AddThis Widget
          • CSS - Its All About Understanding Selectors
          • CSS - Understanding the Cascade
          • Visual Partitioning
          • Where is the Site Logo?
          • Using Nivo Slider
          • Styling jQuery Widgets
          • Using a Custom Favicon
        • Design Resources
        • Troubleshooting CSS Issues
        • Styling Admin Areas
          • Creating An Admin Toolbar
          • Administration Menu
        • How To Control Headings
        • Changing the jQuery UI Theme
        • Improving Your YSlow or Page Speed Score
        • Controlling the Size of Avatars
        • Styling Recaptcha
        • Creating Cross Platform Favicons
        • Creating mojoPortal CMS Skins with Artisteer
          • Artisteer 3.1 Instructions
          • Artisteer 3.0 Instructions
          • Artisteer 2.4 to 2.6 Instructions
          • Artisteer 2.3 Instructions
        • Skin Config
      • Features
        • Audio/Video Players
        • Better Image Gallery
          • Getting Started With The Better Image Gallery
        • Blog
          • Using Open Live Writer with Your Blog
          • Adding Content to the Blog Sidebar
          • Using Feedburner with Your Blog
            • Getting The Most From Your Blog with Odiogo and Feedburner
          • Using the Blog Feed in Feed Manager
          • Google News Site Map
          • Blog Featured Post
          • Blog Featured Image
          • Blog Post List Module
        • Contact Form
        • Event Calendar Pro
        • Feed Manager
          • Filtering Content in Feed Manager
        • File Manager
        • Form Wizard
        • Forums
          • Allowing Users To Post Images In The Forums
        • HTML Fragment Module
        • HTML Module
        • Image Gallery
        • Newsletter
        • Recent Content
        • Shared Files
        • SuperFlexi
        • WebStore
        • XML/XSL Module
      • Developer Docs
        • How mojoPortal Works
        • Getting the Code
        • Hello World - Developer Quick Start
          • Building a Simple PayPal Buy Now Feature
        • Extending mojoPortal
          • A Simple Custom Module
          • Adding Javascript
          • Cloning an Existing Feature
          • Setting Up a Solution for Custom Development
          • Overview of Content Feature Development
          • Setup and Upgrade for Custom Features
          • Using Friendly Urls in Custom Features
          • Adding Custom Items to the Administration Menu
          • Using a Different Database for a Feature
          • Making Custom Features Searchable
          • Using Module Settings
          • Event Handlers
            • Page Created Event Handlers
            • Site Created Event Handlers
            • User Registered Event Handlers
            • User Sign In Event Handlers
          • Keeping Sessions Alive
        • Developer FAQ
        • Avoid Forking The Code
        • Architecture
        • Using The Installation System
          • Configuring Initial Content
            • Populating Feature Content
        • Using The Task Framework
        • Production Files vs. Source Code
        • Developing in Visual Studio
          • Packaging and Deployment
          • Producing a Minimal Build Without Features
          • Setting Up Your Projects
        • mojoPortal Web Controls
          • SmartCombo
          • FileBrowserTextBoxExtender
        • Using MS AJAX
        • Customizing the Editor Toolbars
          • Controlling The CSS Used in the Editors
        • Using The SQL Query Tool
          • Using Saved Query Data in a Custom Module
        • Using .netTiers with mojoPortal
        • Using The Help System
        • Recommended Tools
        • Sending Email From Custom Code
        • Logging to the mojoPortal log4net log From Custom Code
        • Using ASP.NET Routing in mojoPortal
        • Building a Guestbook Video Series
          • Dev Series 1 Source Code Overview Part 1
          • Dev Series 2 Source Code Overview Part 2
          • Dev Series 3 Custom Solution
          • Dev Series 4 Hello Web
          • Dev Series 5 Hello Web Part 2
          • Dev Series 6 Hello Guest Book
          • Dev Series 7 Concepts Part 1
          • Dev Series 8 Concepts Part 2
          • Dev Series 9 Debugging in IIS
          • Dev Series 10 Create a Table Using the Setup System
          • Dev Series 11 Using The Setup System to Run Upgrade Scripts
          • Dev Series 12 Generating a Data Access Class
          • Dev Series 13 Generate the Business Layer
          • Dev Series 14 First Guestbook Submission
          • Dev Series 15 Form Layout
          • Dev Series 16 Form Layout and Data Binding
          • Dev Series 17 Upgrading from svn and Converting to VS 2010
          • Dev Series 18 CSS Layout
          • Dev Series 19 Using a WYSIWYG Editor and Captcha
          • Dev Series 20 Default Button and Input Validation
          • Dev Series 21 Protecting Against Untrusted Content
          • Dev Series 22 Supporting Page Part 1
          • Dev Series 23 Supporting Pages Part 2
          • Dev Series 24 Supporting Pages Part 3
          • Dev Series 25 Enforcing Security Part 1
          • Dev Series 26 Enforcing Security Part 2
          • Dev Series 27 Implementing the update method
          • Dev Series 28 Feature Settings Part 1
          • Dev Series 29 Feature Settings Part 2
          • Dev Series 30 Feature Settings Part 3
          • Dev Series 31 Feature Packaging and Deployment
          • Guest Book Tutorial Files
      • FAQ
      • Users & Security
        • Use SSL
          • Configuring SSL in mojoPortal
          • Using an SSL Proxy Server
        • Authentication
          • Forms Authentication
          • LDAP Authentication
            • Using Active Directory
            • Using OpenLDAP
          • Using Windows Authentication
          • Controlling Browser Sessions
          • OAuth/OpenID Connect
        • Managing Users
          • Oops You Forgot the Administrator Password
          • User Profile Configuration
          • Password Encryption/Hashing
        • Roles and Permissions
          • Allowing Users To Upload and Browse Files
        • Protecting Static Files
        • Securing the File System
        • Anti-SPAM Measures
        • Use a Custom Machine Key
    • Download

    Menu Structure and Properties

    • Docs
    • Design and Skinning
    • Styling Menus
    • Menu Structure and Properties

    Multiple Menus

    In some designs you may have only one menu that lists the entire site hierarchy while in other designs there may be multiple menus to structure the display of the site hierarchy into different groupings such has having a horizontal tab style menu at the top that only shows top level pages and a vertical sub-menu that shows child pages below the top level. We include a variety of skins with mojoPortal and in the extra-skins.zip download that we update for each release to illustrate the possibilities. You can study the layout.master file of the included skins to learn how to configure various menu possibilities. It is not always immediately obvious what the menu structure of the included skins is capable of because to see it you often have to create a site hierarchy of pages that shows the different levels.

    Skins That Use a Single Menu

    Examples of skins that use a single menu are jqueryui-1 which uses a Superfish menu for the entire site hierarchy, and mitchinson-earthy, mitchinson-earthy-alt1. Some of the Artisteer skins also use a single menu such as artisteer-greenlagoon and artisteer-flashclouds.

    Skins That Use Two Menus

    There are quite a few skins that illustrate this common pattern where we have a top level menu that shows only root level pages (often styled as tabs), and then there is a vertical menu for child pages below the top level pages, usually configured as a TreeView that can expand to show the rest of the site hierarchy. All of the dcarter and styleshout skins use this approach. Some of the Artisteer skins such as artisteer-verticalmenu1 and artisteer-verticalmenu2 also use this approach

    Skins That Use Three Menus

    The andreasvicklund-02 skin implements two levels of horizontal tabs and then a vertical treeview for pages below the top two levels.

    Skins That Use Four Menus

    The andreasvicklund-02-alt1 is almost identical to andreasvicklund-02 except it uses three levels of horizontal tabs instead of two, and then uses a vertical treeview menu for pages deeper than that. It also illustrates using a slide show in the header.

    SiteMenu and PageMenu

    When you study the layout.master file of skins that use multiple menus you will see that all skins use the SiteMenu control for the topmost menu and then use PageMenu controls for additional menu levels. The functionality of SiteMenu and PageMenu is almost identical today but they evolved differently. PageMenu was developed the first time that we implemented a skin with two menus and it was designed for showing the child pages below the pages in the SiteMenu which would be configured to show only one top level of pages. Over time both SiteMenu and PageMenu have evolved to be very similar and to meet a variety of configuration needs. Probably if I were starting the project from scratch today I would have implemented just one control but once you have shipped a product and people are using it you have to consider upgrades and not breaking anything for existing sites, so we have continued using both controls.

    You can have up to four menus, for the topmost menu you should use SiteMenu and for all others, you should use PageMenu. The IDs used on the controls are also important. SiteMenu should have the ID "SiteMenu1", and the PageMenu control(s) can be "PageMenu1", "PageMenu2", and "PageMenu3". These IDs are important because they are used to hide the menu when they have no data. For example, if a top-level page has no child pages then the PageMenu will not be displayed when you visit that page.

    Each menu also uses a SiteMapDataSource which must be present also in layout.master. Shown below is a complete set of four menus and their SiteMapDataSource controls as illustrated in andreasvicklund-02-alt1.

    Note that the SiteMapDataSource controls should be the first thing inside the <form in layout.master.

    <asp:SiteMapDataSource ID="SiteMapData" runat="server" ShowStartingNode="false" />
    <asp:SiteMapDataSource ID="PageMapDataSource" runat="server" ShowStartingNode="false" />
    <asp:SiteMapDataSource ID="level3datasource" runat="server" ShowStartingNode="false" />
    <asp:SiteMapDataSource ID="level4datasource" runat="server" ShowStartingNode="false" />
    <portal:SiteMenu id="SiteMenu1" runat="server" UseTreeView="false" HideMenuOnSiteMap="false" Direction="Horizontal" TopLevelOnly="true"></portal:SiteMenu>
    <portal:PageMenu id="PageMenu1" runat="server" UseTreeView="false" Direction="Horizontal" DynamicDisplayLevels="0" />
    <portal:PageMenu id="PageMenu2" runat="server" UseTreeView="false" Direction="Horizontal" SiteMapDataSource="level3datasource" StartingNodeOffset="2" DynamicDisplayLevels="0" />
    <portal:PageMenu id="PageMenu3" runat="server" SiteMapDataSource="level4datasource" UseTreeView="true" StartingNodeOffset="3" TreeViewShowExpandCollapse="true" MenuSkinID="PageMenu3" />

    Note that the Direction setting does not really control the direction but it does control the CSS class used on the container and the CSS is what makes a menu horizontal or vertical.

    The CSS Classes and other properties for the Menu or TreeView controls used by SiteMenu and PageMenu can be configured from the theme.skin file. Note that the SkinID is used in theme.skin to differentiate different menus that need to be configured differently. By default, the SiteMenu has the SkinID "SiteMenu" and typically you won't have any need to change that. The PageMenu by default uses the SkinID "PageMenu", however, if you have more than one PageMenu and you need to configure them differently you can specify the MenuSkinID property on PageMenu and then use that as the SkinID in theme.skin.

    Interesting Properties of SiteMenu

    Under the hood both SiteMenu and PageMenu use either mojoMenu or mojoTreeView controls, so it is these controls that you configure from the theme.skin file. But some properties are set directly on SiteMenu and PageMenu.

    mojoTreeView and mojoMenu both render as a list of ul and li elements, so in practice, you could choose either one for any menu scenario. However, mojoTreeView has some capabilities that are useful for large site hierarchies because it supports populate on demand. For example, if your site has thousands of pages, you would not want all of the nested ul and li elements to render in the page because that would be a lot of markup and would make the page very heavy and slow down the load time of the page. Instead, you would use mojoTreeView with populate on demand enabled so that only top-level items would render and as you drill down through the menu it renders the child elements on demand as needed. For sites that don't have a huge hierarchy, you might prefer to have all the items render at once. Dynamic flyout menus like Superfish or the horizontal menus in Artisteer skins need all the elements to be rendered in the markup in order to produce the flyout effects by showing and hiding items based on mouse over activity.

    Tip: Don't Get Carried Away With Trying to Reduce Markup or Content

    You might think from the above that you should always try to optimize and use TreeView and PopulateOnDemand to make your pages lighter. This is wrong thinking, remember that the fastest lightest page will have no content at all, but the content is king, it is what people come to your site for. If your site does not have thousands of pages, consider that there may be some SEO (Search Engine Optimization) value in having those internal links in the menu.

    UseTreeView (true or false) controls whether mojoMenu or mojoTreeView is used.

    Used For Both mojoTreeView and mojoMenu

    • IncludeCornerRounders

    Used For TreeView Only

    • TreeViewPopulateOnDemand
    • TreeViewExpandDepth
    • TreeViewShowExpandCollapse
    • SuppressImages

    Used only For mojoMenu

    • DynamicDisplayLevels
    • TopLevelOnly
    • Direction

    Interesting Properties of PageMenu

    PageMenu is similar to SiteMenu and setting information shown above applies but there are some minor differences.

    StartingNodeOffset default is 0, can be used to set the starting depth of a menu. Used to make it show child pages starting at a specific depth. Note that 0 is used for the first level of child pages as shown in the example above from the andreasvicklund-02-alt1 skin.

    IsSubMenu true by default because page menu is designed to show child pages. In Artisteer designs, it is fairly common to have a vertical menu that mirrors the main menu rather than acting as a sub menu. If that is what you want you can set this to false. To me, it seems unnatural to duplicate the menu and more natural to use a sub menu for secondary menus.

    Last Modified by Elijah Fowler on May 01, 2017
    mojoPortal - Launch Your Website Today
    • About
    • Features
    • License
    • Contact Us
    • Get Started
    • Live Demo
    • Download
    • Startup Guide
    • Pro Installation
    • Support
    • Forums
    • Documentation
    • F.A.Q.
    • Premium Support
    • Paid Services
    • Hosting
    • Plugins
    • Training

    Powered by mojoPortal CMS
     |  © 2017 - 2026 i7MEDIA, LLC

    • Plugins
      • Form Wizard Pro
      • Event Calendar Pro
      • Site Membership Pro
      • Web Invoice Pro
      • Fund Raiser Pro
      • Installation Service
    • Forums
      • Installing & Upgrading
      • Site Administration
      • Developer Forum
      • Design & Skinning
      • SuperFlexi
      • More Forums
    • Blog
    • About
      • Features
      • Contact Us
      • Report a Vulnerability
      • Contribute
    • Paid Services
      • Hosting
        • Shared Hosting
        • Dedicated Hosting
      • Paid Support
        • Paid Support Ticket
        • Support Plans
      • mojoPortal Training
    • Docs
      • Install & Admin
        • Installation Quick Start
          • Installing mojoPortal on IIS
            • How to get multiple IIS web sites working on your development machine
          • Migrating mojoPortal to a New Server
        • Hosting Requirements
        • Database Configuration
        • Upgrading
        • Basic Troubleshooting
          • mojoPortal System Log
        • Email Configuration
          • Sending Bulk Email
        • E-commerce
          • Using Authorize.NET
          • Using PayPal Standard
          • Using PayPal Website Payments Pro
          • Using PayPal Express Checkout
          • Using PlugNPay
          • Using WorldPay
        • Managing Pages
          • How To Make a Page Link To a Child Page
          • Linking to External or Existing Pages
          • Renaming Pages and Changing Page Urls
        • Adding Content to Pages
          • Publishing the Same Content on Multiple Pages
            • Same Content on All Pages With Module Wrapper
        • Content Versioning
        • Content Workflow
        • Search Engine Optimization
          • Google Analytics Integration
            • Tracking Outbound Link Clicks
            • Using The Async Google Analytics Controls
          • Submitting Your Site Maps to Search Engines
          • Page Title Format
          • Extensionless Urls
          • 301 Redirects
          • Custom Meta Data
          • Optimizing Your Home Page Url for SEO
        • Advanced Configuration
          • Running in Medium Trust
          • Web.config Guide
            • Sample user.config
            • Using Separate Files for Config Sections
          • Using a Canonical Domain or Host Name
          • Supporting Large File Uploads
          • Using NeatUpload for Multiple File Upload with a Progress Bar
          • CDN Configuration
        • Localization
        • Accessibility
        • Creating a Registration Agreement
        • Capacity Planning
        • Site Search
          • Rebuilding the Search Index
        • Self Hosting jQuery
        • Creating Content Templates
        • Creating Content Style Templates
        • Controlling jQuery & jQuery UI Versions
        • Customizing the 404 Page Not Found Page
        • Adding a Facebook Profile Widget to your site
        • Multi-Tenancy
          • Using Host Names
          • Using Folders
          • Using Related Sites Mode
        • Web Farms and Clusters
          • Overview - Scaling Out vs Scaling Up
          • Implementation Considerations for Web Farms
          • Windows Azure
            • Overview of the Windows Azure Platform
            • Using a Synchronization Framework to Run mojoPortal on Azure
              • Create a Windows Azure Storage Account
              • Deploy the Azure Host to Windows Azure
              • Create a SqlAzure Database
              • Create Windows Azure AppFabric Cache
              • Preparing a Local Copy of mojoPortal for Deployment
              • Uploading mojoPortal Files to Azure Blob Storage
        • Using Open Live Writer to Manage Pages
      • Design and Skinning
        • Upgrading Skins
        • Supporting Tablets and Phones
        • Customizing Framework with Bootswatch
        • Understanding the Layout.master File
          • UserControls as Include Files
            • The SlidePanel User Control
          • Showing Side Columns Even When They Have No Content
          • Using Images in layout.master
          • How The Main Column Layout Works
        • Understanding The style.config File
        • Understanding the CSS Files
        • Using the theme.skin File
          • Styling Facebook Comments
          • Blog Display Settings
          • Login Module Display Settings
          • Member List Display Settings
          • Forum Display Settings
          • Layout Display Settings
          • Registration Page Display Settings
          • WebStore Display Settings
          • Child Page Site Map Display Settings
          • Image Gallery Display Settings
          • Feed Manager Display Settings
          • Shared Files Display Settings
          • Event Calendar Pro Display Settings
          • Form Wizard Pro Display Settings
          • Miscellaneous Other theme.skin settings
          • Search Results Display Settings
          • Fund Raiser Pro Display Settings
        • Styling Menus
          • Menu Structure and Properties
            • Multiple Horizontal Menus
          • Menu Types
          • Unclickable Menu Items
          • The Trouble With ASP.NET Menu
          • Custom Menu CSS Classes
          • FlexMenu
          • Mobile Kit Pro - MobileMenu
        • Skinning Tips
          • Different Styles For Different Features
          • Styling the Search Input Box
          • Using Wireframe Skins
          • How To Make a Side Column Wider On Some Pages
          • A More Flexible Set of Container Panels
          • Customizing Labels and Buttons
          • Customizing the AddThis Widget
          • CSS - Its All About Understanding Selectors
          • CSS - Understanding the Cascade
          • Visual Partitioning
          • Where is the Site Logo?
          • Using Nivo Slider
          • Styling jQuery Widgets
          • Using a Custom Favicon
        • Design Resources
        • Troubleshooting CSS Issues
        • Styling Admin Areas
          • Creating An Admin Toolbar
          • Administration Menu
        • How To Control Headings
        • Changing the jQuery UI Theme
        • Improving Your YSlow or Page Speed Score
        • Controlling the Size of Avatars
        • Styling Recaptcha
        • Creating Cross Platform Favicons
        • Creating mojoPortal CMS Skins with Artisteer
          • Artisteer 3.1 Instructions
          • Artisteer 3.0 Instructions
          • Artisteer 2.4 to 2.6 Instructions
          • Artisteer 2.3 Instructions
        • Skin Config
      • Features
        • Audio/Video Players
        • Better Image Gallery
          • Getting Started With The Better Image Gallery
        • Blog
          • Using Open Live Writer with Your Blog
          • Adding Content to the Blog Sidebar
          • Using Feedburner with Your Blog
            • Getting The Most From Your Blog with Odiogo and Feedburner
          • Using the Blog Feed in Feed Manager
          • Google News Site Map
          • Blog Featured Post
          • Blog Featured Image
          • Blog Post List Module
        • Contact Form
        • Event Calendar Pro
        • Feed Manager
          • Filtering Content in Feed Manager
        • File Manager
        • Form Wizard
        • Forums
          • Allowing Users To Post Images In The Forums
        • HTML Fragment Module
        • HTML Module
        • Image Gallery
        • Newsletter
        • Recent Content
        • Shared Files
        • SuperFlexi
        • WebStore
        • XML/XSL Module
      • Developer Docs
        • How mojoPortal Works
        • Getting the Code
        • Hello World - Developer Quick Start
          • Building a Simple PayPal Buy Now Feature
        • Extending mojoPortal
          • A Simple Custom Module
          • Adding Javascript
          • Cloning an Existing Feature
          • Setting Up a Solution for Custom Development
          • Overview of Content Feature Development
          • Setup and Upgrade for Custom Features
          • Using Friendly Urls in Custom Features
          • Adding Custom Items to the Administration Menu
          • Using a Different Database for a Feature
          • Making Custom Features Searchable
          • Using Module Settings
          • Event Handlers
            • Page Created Event Handlers
            • Site Created Event Handlers
            • User Registered Event Handlers
            • User Sign In Event Handlers
          • Keeping Sessions Alive
        • Developer FAQ
        • Avoid Forking The Code
        • Architecture
        • Using The Installation System
          • Configuring Initial Content
            • Populating Feature Content
        • Using The Task Framework
        • Production Files vs. Source Code
        • Developing in Visual Studio
          • Packaging and Deployment
          • Producing a Minimal Build Without Features
          • Setting Up Your Projects
        • mojoPortal Web Controls
          • SmartCombo
          • FileBrowserTextBoxExtender
        • Using MS AJAX
        • Customizing the Editor Toolbars
          • Controlling The CSS Used in the Editors
        • Using The SQL Query Tool
          • Using Saved Query Data in a Custom Module
        • Using .netTiers with mojoPortal
        • Using The Help System
        • Recommended Tools
        • Sending Email From Custom Code
        • Logging to the mojoPortal log4net log From Custom Code
        • Using ASP.NET Routing in mojoPortal
        • Building a Guestbook Video Series
          • Dev Series 1 Source Code Overview Part 1
          • Dev Series 2 Source Code Overview Part 2
          • Dev Series 3 Custom Solution
          • Dev Series 4 Hello Web
          • Dev Series 5 Hello Web Part 2
          • Dev Series 6 Hello Guest Book
          • Dev Series 7 Concepts Part 1
          • Dev Series 8 Concepts Part 2
          • Dev Series 9 Debugging in IIS
          • Dev Series 10 Create a Table Using the Setup System
          • Dev Series 11 Using The Setup System to Run Upgrade Scripts
          • Dev Series 12 Generating a Data Access Class
          • Dev Series 13 Generate the Business Layer
          • Dev Series 14 First Guestbook Submission
          • Dev Series 15 Form Layout
          • Dev Series 16 Form Layout and Data Binding
          • Dev Series 17 Upgrading from svn and Converting to VS 2010
          • Dev Series 18 CSS Layout
          • Dev Series 19 Using a WYSIWYG Editor and Captcha
          • Dev Series 20 Default Button and Input Validation
          • Dev Series 21 Protecting Against Untrusted Content
          • Dev Series 22 Supporting Page Part 1
          • Dev Series 23 Supporting Pages Part 2
          • Dev Series 24 Supporting Pages Part 3
          • Dev Series 25 Enforcing Security Part 1
          • Dev Series 26 Enforcing Security Part 2
          • Dev Series 27 Implementing the update method
          • Dev Series 28 Feature Settings Part 1
          • Dev Series 29 Feature Settings Part 2
          • Dev Series 30 Feature Settings Part 3
          • Dev Series 31 Feature Packaging and Deployment
          • Guest Book Tutorial Files
      • FAQ
      • Users & Security
        • Use SSL
          • Configuring SSL in mojoPortal
          • Using an SSL Proxy Server
        • Authentication
          • Forms Authentication
          • LDAP Authentication
            • Using Active Directory
            • Using OpenLDAP
          • Using Windows Authentication
          • Controlling Browser Sessions
          • OAuth/OpenID Connect
        • Managing Users
          • Oops You Forgot the Administrator Password
          • User Profile Configuration
          • Password Encryption/Hashing
        • Roles and Permissions
          • Allowing Users To Upload and Browse Files
        • Protecting Static Files
        • Securing the File System
        • Anti-SPAM Measures
        • Use a Custom Machine Key
    • Download
    Sign In