Визуализация контроллера Sitecore, вызывающая исключение StackruException
Я пытаюсь сделать простой рендеринг контроллера с Sitecore 8 и по какой-то причине он производит StackruException
в строке внутри разметки основного макета, которая содержит ссылку на заполнитель, в котором она должна отображаться. Кажется, это приводит к сбою рабочего процесса, но вы можете увидеть переполнение стека при отладке процесса:
Вот мой очень простой контроллер:
И вот мое определение рендеринга контроллера:
Репродукция заметки:
- Это происходит в стандартной установке Sitecore 8 (версия 150427 - устанавливается через SIM-карту).
- Проект MVC также создается с пустым проектом ASP.NET, а затем NuGetting в MVC 5.1.
- 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");