c# - Cannot change mvc layout in SiteCore 8.0 (update 3) from code -


i trying change layout in sitecore 8.0 (update 3) pages code behind. using layout resolver pipeline it. can debug & see changed path, cannot updated layout on ui. have seen various post googling, doing same thing quite old (older 2-3 yrs).

below layout resolver pipeline code

  public class layoutresolver : httprequestprocessor {     public layoutresolver()     {         system.diagnostics.trace.writeline("pipeline: ctor() has been called");     }     /// <summary>     /// gets layout page     /// </summary>     /// <param name="args"></param>      public override void process(httprequestargs args)     {         system.diagnostics.trace.writeline("pipeline: atleast called");         assert.argumentnotnull(args, "args");         if (!canprocess())         {             return;         }         context.page.filepath = "/views/shared/businesslayout_two.cshtml";     }      private static bool canprocess()     {         return context.database != null                 && !iscore(context.database);     }     private static bool iscore(database database)     {         return database.name == constants.coredatabasename;     } } 

edit : showconfig.config show resolver register in config. sitecoresample.helpers.layoutresolver resolver.

<processor type="sitecore.pipelines.httprequest.layoutresolver, sitecore.kernel"/> <processor type="sitecoresample.helpers.layoutresolver, sitecoresample" patch:source="sitecore.mvc.config"/> <processor type="sitecore.mvc.pipelines.httprequest.transfermvclayout, sitecore.mvc" patch:source="sitecore.mvc.config"/> <processor type="sitecore.mvc.pipelines.httprequest.transfercontrollerrequest, sitecore.mvc" patch:source="sitecore.mvc.config"/> <processor type="sitecore.experienceeditor.pipelines.httprequest.checkdevice, sitecore.experienceeditor" patch:source="sitecore.experienceeditor.config"/> <processor type="sitecore.pipelines.httprequest.pageeditorhandlenolayout, sitecore.experienceeditor" patch:source="sitecore.experienceeditor.config"/> <processor type="sitecore.experienceexplorer.business.pipelines.httprequest.executerequest, sitecore.experienceexplorer.business" patch:source="sitecore.experienceexplorer.config"/> 

debug screen shot

since using mvc need add procesors different set of pipelines, layoutresolver pipeline mention relevant webforms projects..

i suggest create layout item under /sitecore/layout/layouts secondary mvc layout. create processor switch layout item secondary 1 required:

using system; using sitecore; using sitecore.mvc.pipelines.response.getpagerendering;  namespace myproject.cms.custom.pipelines.getpagerendering  {     public class getcustomlayoutrendering : getpagerenderingprocessor     {         public override void process(getpagerenderingargs args)         {             if (args.result == null)                 return;              if (!shouldswitchlayout()) //or whatever custom logic                 return;              args.result.layoutid = new guid("{guid-to-alt-layout}");             args.result.renderer = null;         }     } } 

and patch processor in mvc.getpagerendering pipeline:

<mvc.getpagerendering>   <processor type="myproject.cms.custom.pipelines.getpagerendering.getcustomlayoutrendering, myproject.cms.custom"/> </mvc.getpagerendering> 

it's important set args.result.renderer null, since force rendering refetched , use alternative layout id set.


Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -