Визуализация контроллера Sitecore, вызывающая исключение StackruException

Я пытаюсь сделать простой рендеринг контроллера с Sitecore 8 и по какой-то причине он производит StackruException в строке внутри разметки основного макета, которая содержит ссылку на заполнитель, в котором она должна отображаться. Кажется, это приводит к сбою рабочего процесса, но вы можете увидеть переполнение стека при отладке процесса:

сбой w3pПереполнение стека

Вот мой очень простой контроллер:

Контроллер / Просмотр

И вот мое определение рендеринга контроллера:

Репродукция заметки:

  1. Это происходит в стандартной установке Sitecore 8 (версия 150427 - устанавливается через SIM-карту).
  2. Проект MVC также создается с пустым проектом ASP.NET, а затем NuGetting в MVC 5.1.
  3. Web.config & Global добавлен в проект из корня сайта Sitecore в wwwroot,

К вашему сведению - все отлично работает при рендеринге вида - это просто рендеринг контроллера, который, кажется, вызывает проблему

3 ответа

Решение

Таким образом, проблема была довольно простой в конце.

Возвращение ViewResult когда представление предназначено как частичное представление (которым будут все визуализации Sitecore), тогда необходимо установить для свойства макета в разметке значение null:

@{
    Layout = null;
}

В противном случае MVC попытается обернуть файл макета вокруг него, который, конечно, содержит заполнитель Sitecore, который вызывает бесконечный цикл и завершает рабочий процесс с StackruException,

Таким образом, в контексте Sitecore либо возвращайте PartialViewResult, либо возвращайте ViewResult с макетом, установленным в значение null.

Я полагаю, что в настройке заполнителя чего-то не хватает, не могли бы вы проверить путь к параметру sitecore/layout/placeholder?

Должен быть ключ-заполнитель, который вы пытаетесь использовать.

Надеюсь, это поможет

Ура!!

Я думаю, что проблема может быть с методом View() вызывается без каких-либо параметров, которые могут вызвать повторную визуализацию всей страницы Sitecore.

Попробуйте добавить параметр в View() как это:

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

Или каким бы ни был путь представления, который вы хотите вернуть.


РЕДАКТИРОВАТЬ:

Как обнаружил David Masters, по какой-то причине проблема с вызовом View вместо PartialView метод с полным путем в качестве параметра. Правильный код:

return PartialView("/Views/Courses/Index.cshtml");
Другие вопросы по тегам