Sitecore控制器呈现导致StackOverflowException

时间:2015-06-23 10:03:46

标签: asp.net asp.net-mvc sitecore sitecore-instance-manager

我正在尝试使用Sitecore 8进行简单的控制器渲染,并且出于某种原因,它在主布局标记中的行上生成StackOverflowException,其中包含对要呈现的占位符的引用。似乎崩溃了工作进程,但你可以看到调试进程时堆栈溢出:

w3p crash StackOverflow

这是我非常基本的控制器:

Controller/View

这是我的控制器渲染定义:

enter image description here

复制说明:

  1. 这是在一个vanilla Sitecore 8安装中发生的(通过SIM安装的版本150427)。
  2. MVC项目也是使用空的ASP.NET项目创建的,然后是MVC 5.1中的NuGetting。
  3. Web.config& Global已从wwwroot中的Sitecore站点根目录添加到项目中。
  4. 仅供参考 - 视频渲染一切都很好 - 它只是控制器渲染,似乎导致了问题

3 个答案:

答案 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设置?

您应该尝试使用占位符键。

希望这会有所帮助

干杯!!