The content you're reading is getting on in years
This post is on the older side and its content may be out of date.
Be sure to visit our blogs homepage for our latest news, updates and information.
The breadcrumb is an essential piece of navigation to every web site. Sitefinity lets you create such navigation using the Breadcrumb widget, available in the toolbox out of the box. By default that widget displays your path and current position in the site page hierarchy. Sometimes this is not enough and you may want to show additional information in the breadcrumb, depending on what is currently visible on the page. One such case is to display the title of a content item in master-detail scenarios. This blog post is going to explain how you can do that.
As long as you only use static content on your pages, the default behavior of the breadcrumb widget should be OK. The widget displays only info from the sitemap, so no other info except pages is available. When viewing a single content item on a page, this is not enough. The breadcrumb doesn’t include the title of the item.
There is a way to display that title, which differs depending on the type of widget showing the content items.
The logic for including items in the breadcrumb cannot be implemented in the sitemap, as it only deals with pages. It must be in the widget which has the ability to show different content on the same page, like master-detail scenarios. The built-in widgets which do this are the ones used by all built-in modules, as well as the one that display content from dynamic modules created in the module builder. Those widgets already support adding items to the breadcrumb. You only need to set the AllowVirtualNodes property to true in advanced mode. Once that’s done, all looks ok.
If you develop custom widgets, but still want to add items to the breadcrumb, there’s a way to do it. It differs slightly for WebForms widgets and MVC widgets
To add items to the breadcrumb from a custom widget, there are two things that need to be done:
Both of those steps are done by implementing the IBreadcrumExtender interface in your widget class. The interface has only one method called GetVirtualNodes. Your implementation should return a list of SiteMapNode objects, which will appear in the breadcrumb. The Title property is what your users see.
Registering the widget as a breadcrumb extender should be done on the PreRender event. You should call the RegisterBreadcrumbExtender method on the current page and pass this as an argument (your widget). Here is all the code you need:
CustomNewsWidget : SimpleView, IBreadcrumExtender
// your other widget code
IEnumerable<SiteMapNode> GetVirtualNodes(SiteMapProvider provider)
"Title appearing in breadcrumb"
Adding items to the breadcrumb from MVC widgets is very similar, but takes into account the MVC nature of your widget (which is an MVC controller). Note that what we describe here only works in Hybrid mode of MVC. This is the only mode which allows a breadcrumb on the page, so doing it in other modes doesn’t make sense. Normally, your MVC controller is not hosted in a page (it IS a page). However, in hybrid mode, Sitefinity gives you access to the Page object, and this lets you register a breadcrumb extender using the same method that we used in the WebForms widget. The only difference is that by definition our MVC widget doesn’t have lifecycle. It has action methods, which are invoked independently. Because of this, we have to register the widget as a breadcrumb extender in each action method (at least each one which needs to add items to the breadcrumb). Here is the code of an MVC widget,which adds items to the breadcrumb:
, Title =
, SectionName =
CustomNewsListController : Controller, IBreadcrumExtender
var model =
// register the controller as a breadcrumb extender
var pageObject = (
System.Collections.Generic.IEnumerable<System.Web.SiteMapNode> GetVirtualNodes(System.Web.SiteMapProvider provider)
You can add items to the Sitefinity breadcrumb easily, both from built-in content widgets, as well as your custom widgets. I hope this proves useful in your projects. Please leave any feedback in the comments.
View all posts from The Progress Team on the Progress blog. Connect with us about all things application development and deployment, data integration and digital business.
Subscribe to get all the news, info and tutorials you need to build better business apps and sites
You have the right to request deletion of your Personal Information at any time.
You can also ask us not to pass your Personal Information to third parties here: Do Not Sell My Info
Let our experts teach you how to use Sitefinity's best-in-class features to deliver compelling digital experiences.
Copyright © 2021 Progress Software Corporation and/or its subsidiaries or affiliates.All Rights Reserved.
Progress, Telerik, Ipswitch, Chef and certain product names used herein are trademarks or registered trademarks of Progress Software Corporation and/or one of its subsidiaries or affiliates in the U.S. and/or other countries. See Trademarks for appropriate markings.