Question

Trying to setup a Mobile Channel for use in Edit Mode in EPiServer 7.

Been following this link

http://world.episerver.com/Documentation/Items/Developers-Guide/EPiServer-CMS/7/Content/Display-Channels/

Created an Initialization module

[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class DisplayModesInitialization : IInitializableModule
{
    public void Initialize(InitializationEngine context)
    {
        if (context.HostType == HostType.WebApplication)
        {
            System.Web.WebPages.DisplayModeProvider.Instance.Modes.RemoveAt(0);
            context.Locate.DisplayChannelService()
                                .RegisterDisplayMode(new DefaultDisplayMode(RenderingTags.Mobile)
                                {
                                    ContextCondition = (r) => r.Request.Browser.IsMobileDevice
                                });                
        }
    }

    public void Preload(string[] parameters) { }

    public void Uninitialize(EPiServer.Framework.Initialization.InitializationEngine context) { }
}

As you can see I tried removing the existing "Mobile" display mode that exists to be replaced with the one created through the EPiServer DisplayChannelService().

Just browsing to the homepage works ok but when I force the userAgent to be a mobile browser it does hit the correct view... i.e. Index.mobile.cshtml

However it appears to still be looking for the _Layout.cshtml instead of _Layout.mobile.cshtml and even at that it fails to find it.

The file "~/Views/Shared/_Layout.cshtml" could not be rendered, because it does not exist or is not a valid page.

Anyone successfully create a mobile IDisplayMode for MVC through the EPiServer DisplayChannelService ?

Also if I explicitly set the layout in the mobile view

@{
    Layout = "~/Views/Shared/_Layout.mobile.cshtml";
}

If fails to find that also ?

The file "~/Views/Shared/_Layout.mobile.cshtml" could not be rendered, because it does not exist or is not a valid page.

both the _Layout and _Layout.mobile DO exist in that location ?

Was it helpful?

Solution

Managed to get it working.

Discovered that _ViewStart.cshtml had the following set:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    DisplayModeProvider.Instance.RequireConsistentDisplayMode = true; 
} 

So I removed the DisplayModeProvider.Instance.RequireConsistentDisplayMode = true; and it now works.

Not sure why this was causing the problem as there are both mobile and desktop views for the homepage and also mobile and desktop layouts ?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top