Рендеринг контента внутри страницы 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);
...
}