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"/>
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
Post a Comment