我正在尝试使用Sitecore 8进行简单的控制器渲染,并且出于某种原因,它在主布局标记中的行上生成StackOverflowException
,其中包含对要呈现的占位符的引用。似乎崩溃了工作进程,但你可以看到调试进程时堆栈溢出:
这是我非常基本的控制器:
这是我的控制器渲染定义:
复制说明:
wwwroot
中的Sitecore站点根目录添加到项目中。仅供参考 - 视频渲染一切都很好 - 它只是控制器渲染,似乎导致了问题
答案 0 :(得分:3)
所以问题实际上最终非常简单。
当视图作为局部视图(所有Sitecore渲染都是)时返回ViewResult
,那么必须将标记中的layout属性设置为null:
@{
Layout = null;
}
否则MVC将尝试将布局文件包装在其周围,当然包含Sitecore占位符,这会导致无限循环并使用StackOverflowException
使工作进程崩溃。
因此,在Sitecore的上下文中,要么返回一个PartialViewResult,要么返回一个将布局设置为null的ViewResult。
答案 1 :(得分:1)
我认为问题可能是在没有任何参数的情况下调用方法View()
会导致重新呈现整个Sitecore页面。
尝试将参数添加到View()
,如下所示:
return View("/Views/Courses/Index.cshtml");
或者您想要返回的视图的路径。
修改强>
如@David Masters所示,由于某种原因,问题在于使用完整路径作为参数调用View
而不是PartialView
方法。正确的代码是:
return PartialView("/Views/Courses/Index.cshtml");
答案 2 :(得分:1)
我猜占位符设置中缺少某些内容,您是否可以检查路径sitecore / layout / placeholder设置?
您应该尝试使用占位符键。
希望这会有所帮助
干杯!!