In the example, the part of the URL that is `
http://site/News/` is the URL to a page instance of model type `
NewsContainer`. By registering a partial router for `
ModelType NewsContainer`, the partial router takes care of routing the remaining part of the URL. The partial router handles routing `
## Extend routing for the NewsContent type
The following example extends routing for the `
NewsContainer` content type:
This code example is just one way of implementing a partial router and uses DDS as external storage and no caching, it is not meant as production-ready code.
## Implement NewsContentStore
Create a simple store to deliver `
NewsContent` instances because `
NewsContent` is stored outside Optimizely Content Management System (CMS) (in Optimizely Dynamic Data Store).
You also could return the routed data as `
IContent` instances, where the data can be delivered through a custom content provider. Or, you can store the data in CMS so that no provider is needed and the data can be loaded or saved through `
In the following example, partially route URL parts like _Sports/TheGame/_ by adding a method to the store that accepts a category (that corresponds to _Sports_ in the URL example) and the name of an article (that corresponds to _TheGame_ in the URL example).
## Implement IPartialRouter
Make the partial router handle incoming requests beyond pages of type `
NewsContainer`. Also, allow outgoing FURLs to be created for instances of `
## Register a router
The following example initializes code that registers the partial router.
## Register MVC controllers
In CMS, you register an MVC controller for a Model type by implementing the `
EPiServer.Web.IRenderTemplate<TModel>` interface. This is done implicitly if your controller inherits `
EPiServer.Web.Mvc.PageController<TPage>` or `
EPiServer.Web.Mvc.BlockController<TBlock>`. The following code is for an MVC controller for `
NewsContent` and `
NewsContainer` that uses an extension method in the `
## Create MVC views
To display a single news from the above controller, create a view located as _/Views/NewsContent/index.aspx_. Also, create a view for the `
NewsContainer` class that lists all news with partial routed FURLs.
## Create outgoing URLs
To create an outgoing URL for a `
NewsContent` item, call the `
EPiServer.Web.UrlResolver.Current.GetVirtualPathForNonContent` method. For `
IContent` instances, you also can call the `
GetVirtualPath` or `
GetUrl` methods and pass in the reference to the content. In web forms, you can create a link in the HTML, such as _/Templates/NewsContent.aspx?id=7\_\_news_, then the FURL module calls the partial router during outgoing parsing to create an FURL for the content. The following example shows how to construct outgoing FURLs.
## Create NewsContent
The following example shows how to route to data that is stored outside CMS. Use `
DynamicDataStore` to store `
NewsContent`. The following code creates `
NewsContent` instances and stores them in `