---
title: Change template programmatically
slug: cms-11/dev-docs/changing-template-programmatically
docTags: 
createdAt: 2026-07-22T19:45:17.341Z
---

Given that there is a page model registered like:

```csharp
[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.

- One is `StandardTemplate` without tags which is the default template to use when rendering page instances of type `TypedPage`.
- The other template is another generic template for pages more suitable for rendering mobile devices.

```csharp
[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 a request for `TypedPage` instances when the request comes from a mobile device.

```csharp
[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) {}
}
```
