Skip to content

Defining Sitemap Nodes in XML

NightOwl888 edited this page Mar 12, 2014 · 11 revisions

The following is a simple sitemap XML file that can be used with the MvcSiteMapProvider:

<?xml version="1.0" encoding="utf-8" ?> 
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
            xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

  <mvcSiteMapNode title="Home" controller="Home" action="Index" changeFrequency="Always" updatePriority="Normal"> 
    <mvcSiteMapNode title="Browse Store" controller="Store" action="Index" /> 
    <mvcSiteMapNode title="Checkout" controller="Checkout" /> 
  </mvcSiteMapNode> 
</mvcSiteMap>

Note: There must be exactly 1 root mvcSiteMapNode in the configuration file and the rest of the mvcSiteMapNode elements should be defined below the root node.

The following attributes can be given on an XML node element:

Display Attributes

Attribute Required? Default

title

Yes (empty)
The title of the node. Localizable.

description

No (empty)
Description of the node. Localizable. By default this value will be put into the HTML title attribute of the link.

clickable

No true
Is the node clickable or just a grouping node?

visibilityProvider

No (empty); returns true
Class that will be used to determine visibility for a sitemap node. Default setting can be overridden by the configuration/appSettings value "MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" in the root web.config file.

visibility

No (empty)
Optional extra data that can be passed to a visibility provider to make convention-based visibility. Example from demo: visibility="SiteMapPathHelper,!*"

order

No 0
The sort order the node will be displayed in the Menu and SiteMap HTML helpers relative to its sibling nodes.

imageUrl

No (empty)
Optional image to be shown by supported HtmlHelpers. Localizable.

targetFrame

No (empty)
Optional target frame for the node link.

URL/Routing Attributes

Attribute Required? Default

area

No (empty)
The MVC area for the sitemap node. If not specified, it will be inherited from a node higher in the hierarchy.

controller

Yes (empty)
The MVC controller for the sitemap node. Case-sensitive! If not specified, it will be inherited from a node higher in the hierarchy.

action

Cond. (empty)
The MVC action method for the sitemap node. Required if URL is not specified.

route

No (empty)
Can optionally be specified to bind the node URL generation to a specific route.

inheritedRouteParameters

No (empty)
Route parameters that should be inherited from the parent sitemap node.

preservedRouteParameters

No (empty)
Optional preserved route parameter names (= values that will be used from the current request route).

urlResolver

No Sitemap provider's
SiteMapNodeUrlResolver
instance
Class that will be used to generate URLs for sitemap nodes.

cacheResolvedUrl

No true
Should the resolved URL be cached (true) or resolved on each request (false)? If the preservedRouteParameters attribute is used, this setting will be ignored.

url

Cond. (autogenerated based
on routes)
The URL represented by the node. Required if Controller and Action are not provided.

SEO Attributes

Attribute Required? Default

canonicalKey

No (empty)
Optional. The key value for the node that contains the primary copy of the content for the current node, if it is largely similar. Cannot be used in conjunction with canonicalUrl.

canonicalUrl

No (empty)
Optional. The primary URL for what is completely or mostly duplicated content on the current node. The value may be an absolute URL (in the current site or in an external site), a rooted URL starting with '~/', or a relative URL. Cannot be used in conjunction with canonicalKey.

metaRobotsValues

No (empty)
Optional. A space-delimited list of values to apply to the robots meta tag. These will apply to all robots that crawl the site. Allowed values: index, noindex, follow, nofollow, none, noarchive, nocache, nosnippet, nopreview, noodp, noydir.

lastModifiedDate

No (empty)
Last modified date for the node. Will be output to sitemaps XML for search engines.

changeFrequency

No Undefined
Change frequency for the node. Will be output to sitemaps XML for search engines.

updatePriority

No Undefined
Update priority for the node. Will be output to sitemaps XML for search engines.

Other Attributes

Attribute Required? Default

key

No (autogenerated)
The unique identifier for the node.

dynamicNodeProvider

No (empty)
A class name implementing MvcSiteMapProvider.IDynamicNodeProvider and providing dynamic nodes for the site map. These nodes are cached, not per-request.

httpMethod

No GET
The HTTP method that will be used to check node accessibility. This value is used to select correct controller action if a controller has multiple action accepting different HTTP verbs. Set to * or Request to use HTTP method of current request.

roles

No (empty)
Comma-separated list of roles allowed to access the node and its child nodes.

resourceKey

No (empty)
Optional implicit resource key for use during localization of the node.

(custom name)

No (empty)
Any attributes not defined in this list will automatically be parsed and added to the node.Attributes dictionary. Localizable (string data type only).

XML Inheritance

Default Behavior

By default, "area" and "controller" (route values only) are automatically inherited from the parent node if they are not explicitly specified. This allows you to use fewer attributes when configuring nodes to make the XML less verbose.

The following two XML declarations will produce exactly the same results, however as you can see the second one requires less markup because it is taking advantage of the default inheritance behavior.

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
            xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

    <mvcSiteMapNode title="Home" controller="Home" action="Index">
        <mvcSiteMapNode title="About" controller="Home" action="About"/>
        <mvcSiteMapNode title="Contact" controller="Home" action="Contact"/>
        <mvcSiteMapNode title="Products" controller="Products" action="Index">
            <mvcSiteMapNode title="Flashlight" controller="Products" action="Details" id="1"/>
            <mvcSiteMapNode title="AA Battery" controller="Products" action="Details" id="2"/>
        </mvcSiteMapNode>
        <mvcSiteMapNode title="Administration" area="Admin" controller="Home" action="Index">
            <mvcSiteMapNode title="Manage Products" area="Admin" controller="Products" action="Manage"/>
        </mvcSiteMapNode>
    </mvcSiteMapNode>

</mvcSiteMap>
<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
            xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

    <mvcSiteMapNode title="Home" controller="Home" action="Index">
        <mvcSiteMapNode title="About" action="About"/>
        <mvcSiteMapNode title="Contact" action="Contact"/>
        <mvcSiteMapNode title="Products" controller="Products" action="Index">
            <mvcSiteMapNode title="Flashlight" action="Details" id="1"/>
            <mvcSiteMapNode title="AA Battery" action="Details" id="2"/>
        </mvcSiteMapNode>
        <mvcSiteMapNode title="Administration" area="Admin" controller="Home" action="Index">
            <mvcSiteMapNode title="Manage Products" controller="Products" action="Manage"/>
        </mvcSiteMapNode>
    </mvcSiteMapNode>

</mvcSiteMap>

inheritedRouteParameters

You can also specify additional route values to inherit, including custom attributes, by adding the name of the value to the inheritedRouteParameters. Multiple values should be separated by a comma.

The following 2 XML declarations will have exactly the same result.

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
            xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

    <mvcSiteMapNode title="Home" controller="Home" action="Index">
        <mvcSiteMapNode title="Products" controller="Products" action="Index" type="accessory">
            <mvcSiteMapNode title="Flashlight" action="Details" id="1" type="product"/>
            <mvcSiteMapNode title="AA Battery" action="Details" id="2" type="accessory"/>
        </mvcSiteMapNode>
    </mvcSiteMapNode>

</mvcSiteMap>
<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
            xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

    <mvcSiteMapNode title="Home" controller="Home" action="Index">
        <mvcSiteMapNode title="Products" controller="Products" action="Index" type="accessory">
            <mvcSiteMapNode title="Flashlight" action="Details" id="1" type="product"/>
            <mvcSiteMapNode title="AA Battery" action="Details" id="2" inheritedRouteParameters="type"/>
        </mvcSiteMapNode>
    </mvcSiteMapNode>

</mvcSiteMap>

Want to contribute? See our [Contributing to MvcSiteMapProvider] (https://github.com/maartenba/MvcSiteMapProvider/blob/master/CONTRIBUTING.md) guide.



[Version 3.x Documentation] (Version-3.x-Documentation)


Unofficial Documentation and Resources

Other places around the web have some documentation that is helpful for getting started and finding answers that are not found here.

Tutorials and Demos

Version 4.x
Version 3.x

Forums and Q & A Sites

Other Blog Posts

Clone this wiki locally