【问题标题】:Sitecore controller rendering causing StackOverflowExceptionSitecore 控制器渲染导致 StackOverflowException
【发布时间】:2015-06-23 10:03:45
【问题描述】:

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

这是我最基本的控制器:

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

复制说明:

  1. 这发生在普通 Sitecore 8 安装中(修订版 150427 - 通过 SIM 安装)。
  2. MVC 项目也是用空的 ASP.NET 项目创建的 vanilla,然后在 MVC 5.1 中使用 NuGetting。
  3. Web.config 和全局已从位于 wwwroot 的 Sitecore 站点根目录添加到项目。

仅供参考 - 进行视图渲染一切都很好 - 只是控制器渲染似乎导致了问题

【问题讨论】:

  • 一时没得到这个解决方案,当搜索unhandled microsoft .net framework exception w3wp sitecore stackoverflow,终于这个问题帮了大忙。

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


【解决方案1】:

所以问题最后其实很简单。

当视图打算作为部分视图(所有 Sitecore 渲染都将是)时返回 ViewResult,那么您必须将标记中的布局属性设置为 null:

@{
    Layout = null;
}

否则 MVC 将尝试将布局文件包装在其周围,其中当然包含您的 Sitecore 占位符,这会导致无限循环并使用 StackOverflowException 使工作进程崩溃。

因此,在 Sitecore 的上下文中,要么返回 PartialViewResult,要么返回布局设置为 null 的 ViewResult。

【讨论】:

  • 谢谢,你让我免于将我的窗口格式化为最后一个选项
  • 哈!我很高兴阻止了这种情况
【解决方案2】:

我猜占位符设置中缺少某些内容,您可以检查路径 sitecore/layout/placeholder 设置吗?

应该有一个您正在尝试使用的占位符键。

希望这会有所帮助

干杯!!

【讨论】:

    【解决方案3】:

    我认为问题可能在于方法 View() 在没有任何参数的情况下被调用,这可能会导致重新渲染整个 Sitecore 页面。

    尝试像这样向View()添加参数:

    return View("/Views/Courses/Index.cshtml");
    

    或者你想要返回的视图的路径。


    编辑:

    正如@David Masters 发现的那样,由于某种原因,问题在于使用完整路径作为参数调用View 而不是PartialView 方法。正确的代码是:

    return PartialView("/Views/Courses/Index.cshtml");
    

    【讨论】:

    • 一段文字:This is an index view
    • 你能在return View("/Views/Courses/Index.cshtml"); 行放一个断点,看看它被调用了多少次吗?
    • 日志中有什么内容吗?你能改变你的控制器,让它继承自Sitecore.Mvc.Controllers.SitecoreController吗?你能检查一下你的页面的演示细节main占位符里面有哪些组件?
    • 我已将其更改为 PartialView("") 而不是 View 并且它可以工作。但这很奇怪,就像我之前在其他项目上使用 View 所做的那样,它运行良好
    • 您知道为什么 View 不起作用吗?似乎很奇怪,它实际上也使工作进程崩溃了……严重。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多