在Umbraco页面内呈现内容

时间:2016-06-02 21:18:30

标签: c# asp.net-mvc razor umbraco

我有一个doc类型,允许用户使用多节点treepicker为页面选择警报。警报是另一种文档类型的实例。警报没有自己的页面,所以我想使用他们选择的模板,如部分。我想做的是:

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项目中创建部分并在那边处理它。但是,我遇到了以下错误:

  

“呈现ID为1128的模板时出错:   'System.InvalidOperationException:控制器的单个实例   'Umbraco.Web.Mvc.RenderMvcController'不能用来处理   多个请求。如果正在使用自定义控制器工厂,请确保   它为每个请求创建一个新的控制器实例。\ r \ n   在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   在umbraco.library.RenderTemplate(Int32 PageId,Int32 TemplateId)'   “

提前感谢您查看此内容!

1 个答案:

答案 0 :(得分:1)

我看到你在尝试什么,但这不是你的方法。

  

警报没有自己的页面,因此我想使用他们选择的模板,如部分。

如果文档类型(节点)不是页面而只是数据的容器,则应该在没有模板的情况下保留它。这是因为umbraco将为该节点生成一个URL,你将搞乱你的SEO。

  

我想这样做是因为我喜欢在Umbraco中选择模板的想法

您可以在文档类型(将列出所有可能模板的新数据类型)上创建一个下拉属性,以模仿模板选择器。在显示节点时,您会写出如下内容:

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