Рендеринг контента внутри страницы Umbraco

У меня есть тип документа, который позволяет пользователям выбирать оповещения для страниц, используя многоузловое средство выбора деревьев. Оповещения - это экземпляры документов другого типа. У оповещений нет собственной страницы, поэтому я хотел использовать выбранный ими шаблон как частичный. Что я хочу сделать, это что-то вроде:

var alertIds = Model.Content.GetPropertyValue("alert");

List<umbraco.NodeFactory.Node> alerts = new List<umbraco.NodeFactory.Node>();

foreach (var alertId in alertIds.ToString().Split(','))
{
    alerts.Add(new umbraco.NodeFactory.Node(int.Parse(alertId)));
}

Тогда в качестве примера я мог бы сделать:

library.RenderTemplate(alerts[0].Id)

Я хотел сделать это таким образом, потому что мне нравится идея, что шаблоны могут быть выбраны в Umbraco и просто знаю, как визуализировать себя, вместо того, чтобы создавать частичное в моем проекте MVC и обрабатывать его на той стороне. Однако я сталкиваюсь со следующей ошибкой:

"Ошибка рендеринга шаблона с идентификатором 1128:" System.InvalidOperationException: один экземпляр контроллера "Umbraco.Web.Mvc.RenderMvcController" не может использоваться для обработки нескольких запросов. Если используется фабрика пользовательских контроллеров, убедитесь, что она создает новый экземпляр контроллера для каждого запроса. \ r \ n в System.Web.Mvc.ControllerBase.VerifyExecuteCalledOnce()\r\n в System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)\r\n в системе. Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) \ r \ n в System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext)\r\n в Umbraco.Web.Mvcra ExecuteUmbracoRequest()\r\n в Umbraco.Web.Templates.TemplateRenderer.RenderUmbracoRequestToString(RequestContext requestContext)\r\n в Umbraco.Web.Templates.TemplateRenderer.ExecuteTemplateRenebWareRequite.Templates.TemplateRenderer.Render(писатель StringWriter) \ r \ n на umbraco.library.RenderTemplate(Int32 PageId, Int32 TemplateId)' "

Заранее спасибо за проверку этого!

1 ответ

Решение

Я вижу, что вы пытаетесь, но это не способ сделать это.

У оповещений нет собственной страницы, поэтому я хотел использовать выбранный ими шаблон как частичный.

Если тип документа (узел) - это не страница, а просто контейнер для данных, вы должны оставить его без шаблона. Это потому, что Umbraco будет генерировать URL для этого узла, и вы испортите свой SEO.

Я хотел сделать это таким образом, потому что мне нравится идея, что шаблоны могут быть выбраны в Umbraco

Вы можете создать раскрывающееся свойство для вашего типа документа (новый тип данных, в котором будут перечислены все возможные шаблоны), чтобы имитировать селектор шаблонов. И при показе узла вы должны написать что-то вроде:

switch(alert.GetPropertyValue<string>("template"))
{
    case "News": RenderForNews(alert);
    case "Frontpage": RenderForFrontpage(alert);
    ...
}
Другие вопросы по тегам