Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
AI OnAI Off
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
This topic describes how to programmatically change the template that is used to render a page.
Given that there is a typed page registered like:
[ContentType]
public class TypedPage : PageData
{
public virtual string Heading { get; set; }
public virtual XhtmlString Content { get; set; }
}
You can have several templates defined for the same typed page. The following example registers two templates for the same typed page.
[TemplateDescriptor(Path = "~/templates/StandardPage.aspx", Default = true)]
public partial class StandardTemplate : TemplatePage<TypedPage>
{ }
[TemplateDescriptor(Path = "~/templates/MobilePage.aspx", Name = "MobileTemplate")]
public partial class MobileTemplate : TemplatePage<TypedPage>
{ }
To change the template that is used for a request, you can attach an event handler to an event that is raised when a template is chosen for a specific request. The following code sample attaches to the event and changes the template for request for TypedPage instances when the request comes from a mobile device.
[InitializableModule]
public class MobileRedirectSample : IInitializableModule
{
public void Initialize(InitializationEngine context)
{
context.Locate.TemplateResolver().TemplateResolved
+= new EventHandler<TemplateResolverEventArgs>(MobileRedirectSample_TemplateResolved);
}
public void Uninitialize(global::EPiServer.Framework.Initialization.InitializationEngine context)
{
context.Locate.TemplateResolver().TemplateResolved
-= new EventHandler<TemplateResolverEventArgs>(MobileRedirectSample_TemplateResolved);
}
void MobileRedirectSample_TemplateResolved(object sender, TemplateResolverEventArgs eventArgs)
{
if (eventArgs.ItemToRender != null && eventArgs.ItemToRender is TypedPage &&
HttpContext.Current.Request.Browser.IsMobileDevice)
{
var mobileRender = eventArgs.SupportedTemplates
.SingleOrDefault(r => r.Name.Contains("Mobile") &&
r.TemplateTypeCategory == eventArgs.SelectedTemplate.TemplateTypeCategory);
if (mobileRender != null)
{
eventArgs.SelectedTemplate = mobileRender;
}
}
}
public void Preload(string[] parameters)
{
}
}
Last updated: Sep 21, 2015