master.cshtml中的UmbracoTemplateview继承覆盖了blog.cshtml中的UmbracoViewPage <custommodel>

时间:2015-12-16 22:13:31

标签: razor umbraco umbraco7

所以我需要能够将我的网站标题设置为访问者所在的页面,所以在我的Master.cshtml中我有

@inherits UmbracoTemplatePage
....
<title>@Model.Content.Name</title>

效果很好。

现在我想将自定义博客帖子模型传递给我的blogview,其中有Master.cshtml作为布局

    @inherits UmbracoViewPage<Umbraco_Blog.Models.BlogPost[]>
    @{
    Layout = "Master.cshtml";
      }

在我的控制器中我返回一个BlogPost []

return CurrentTemplate(blogposts);

但这只是给了我这个错误

  

传递到字典中的模型项是类型的   &#39; Umbraco_Blog.Models.BlogPost []&#39;,但这本词典需要一个模型   项目类型&#39; Umbraco.Web.Models.RenderModel&#39;。

如果我删除了布局,那么它就可以了。

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是使您的BlogPost模型继承自RenderModel。如果采用这种方法,则需要使用IPublishedContent实例调用RenderModel构造函数,您可以这样做:

public BlogPost() : base(UmbracoContext.Current.PublishedContentRequest.PublishedContent)
{
}

另一种解决方案是将布局强烈地键入基类模型,例如

@model MyBaseViewModel

然后将BlogPost模型更改为从该基础模型继承,并使用

定义视图的模型类型
@model BlogPost

请注意,如果采用这种方法,则会丢失辅助属性,例如UmbracoHelper等。