2016-06-02 6 views
1

У меня есть тип документа, который позволяет пользователям выбирать предупреждения для страниц, используя многоуровневый treepicker. Оповещения являются экземплярами другого типа документа. У предупреждений нет собственной страницы, поэтому я хотел использовать выбранный вами шаблон как частичный. То, что я хочу сделать что-то вроде:Рендеринг содержимого на странице 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 и обрабатывать его с этой стороны. Однако я столкнулся с такой ошибкой:

"Error rendering template with id 1128: 'System.InvalidOperationException: A single instance of controller 'Umbraco.Web.Mvc.RenderMvcController' cannot be used to handle multiple requests. If a custom controller factory is in use, make sure that it creates a new instance of the controller for each request.\r\n at System.Web.Mvc.ControllerBase.VerifyExecuteCalledOnce()\r\n at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)\r\n at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)\r\n at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext)\r\n at Umbraco.Web.Mvc.UmbracoMvcHandler.ExecuteUmbracoRequest()\r\n at Umbraco.Web.Templates.TemplateRenderer.RenderUmbracoRequestToString(RequestContext requestContext)\r\n at Umbraco.Web.Templates.TemplateRenderer.ExecuteTemplateRendering(TextWriter sw, PublishedContentRequest contentRequest)\r\n at Umbraco.Web.Templates.TemplateRenderer.Render(StringWriter writer)\r\n at umbraco.library.RenderTemplate(Int32 PageId, Int32 TemplateId)' "

Заранее благодарим за это!

ответ

1

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

Alerts don't have their own page so I wanted to use their selected template like a partial.

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

I wanted to do it this way because I like the idea that the templates can be chosen in Umbraco

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

switch(alert.GetPropertyValue<string>("template")) 
{ 
    case "News": RenderForNews(alert); 
    case "Frontpage": RenderForFrontpage(alert); 
    ... 
} 
+0

Спасибо, это сработает! –

Смежные вопросы