首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sitecore -使用渲染引用动态渲染视图/控制器渲染

Sitecore -使用渲染引用动态渲染视图/控制器渲染
EN

Stack Overflow用户
提问于 2016-06-21 02:24:26
回答 2查看 1.2K关注 0票数 2

我需要在不同的页面上动态地呈现一个项目。因此,我检索了项目的呈现引用,并使用呈现项目id和数据源。

我可以渲染“控制器渲染”类型的项,但不能渲染“视图渲染”。

代码语言:javascript
运行
复制
@Html.Sitecore().Rendering(renderingItem.RenderingID.Guid.ToString(), new  {DataSource = renderingItem.Settings.DataSource, Cacheable = false, Cache_VaryByData = false});

**Exception Message**: Attempt to retrieve context object of type 'System.Web.Mvc.ViewContext' from empty stack.

**Stack Trace**:   at Sitecore.Mvc.Common.ContextService.Peek[T]()
   at Sitecore.Mvc.Presentation.ViewRenderer.GetHtmlHelper()
   at Sitecore.Mvc.Presentation.ViewRenderer.Render(TextWriter writer)
   at Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Render(Renderer renderer, TextWriter writer, RenderRenderingArgs args)
   at Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Process(RenderRenderingArgs args)
   at (Object , Object[] )
   at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
   at Sitecore.Mvc.Pipelines.PipelineService.RunPipeline[TArgs](String pipelineName, TArgs args)
   at Sitecore.Mvc.Helpers.SitecoreHelper.RenderRendering(Rendering rendering)
   at Castle.Proxies.Invocations.SitecoreHelper_RenderRendering_1.InvokeMethodOnTarget()
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Jabberwocky.Autofac.Extras.MiniProfiler.Interceptors.AsyncProfilingInterceptor.Intercept(IInvocation invocation)
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.CustomSitecoreHelperProxy.RenderRendering(Rendering rendering)
   at Castle.Proxies.Invocations.SitecoreHelper_Rendering_1.InvokeMethodOnTarget()
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Jabberwocky.Autofac.Extras.MiniProfiler.Interceptors.AsyncProfilingInterceptor.Intercept(IInvocation invocation)
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.CustomSitecoreHelperProxy.Rendering(String pathOrId, Object parameters)
EN

回答 2

Stack Overflow用户

发布于 2019-01-25 23:43:28

我最近遇到了同样的问题,在我的例子中,我创建了一个自定义的MVC路由,在那里我需要渲染项目的所有渲染。

我遇到了同样的问题,控制器渲染可以工作,但视图渲染不能工作,所以我更改了代码来处理同样的问题。我添加了一个条件来检查渲染类型,并在此基础上添加了一些自定义代码来渲染两者。

代码语言:javascript
运行
复制
 if (rendering.RenderingItem.InnerItem["Path"] == null || string.IsNullOrEmpty(rendering.RenderingItem.InnerItem["Path"]))
            {
                PipelineService.Get().RunPipeline<RenderRenderingArgs>("mvc.renderRendering", new RenderRenderingArgs(rendering, writer));
            }
            else
            {
                ViewData.Model = rendering.Model;
                var viewResult = ViewEngines.Engines.FindPartialView(controllerContext, rendering.RenderingItem.InnerItem["Path"]);
                var viewContext = new ViewContext(controllerContext, viewResult.View,
                                             ViewData, TempData, writer);
                viewContext.ViewBag.renderingUniqueId = rendering.UniqueId;
                viewResult.View.Render(viewContext, writer);
            }

这个解决方案对我很有效。

也许它可以帮助别人,并节省一些时间。

票数 1
EN

Stack Overflow用户

发布于 2016-08-25 09:54:18

您是否尝试过使用@Html.Sitecore().ViewRendering("path to rendering")

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37929299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档