Umbraco 的template使用的默认Model问题

Posted 新西兰程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Umbraco 的template使用的默认Model问题相关的知识,希望对你有一定的参考价值。

Umbraco中的Template默认都继承自 Umbraco.Web.Mvc.UmbracoTemplatePage

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage

它使用了默认的model => Umbraco.Web.Models.RenderModel.

但是,如果你的这个template需要使用一个Custom model, 怎么办。

方法是,使用如下继承指令

@inherits Umbraco.Web.Mvc.UmbracoViewPage<MyCustomModel>

 但是,我们通常的做法是项目中有一个Layout模板(Layout template),项目中其他所有的模板(template)都继承自这个layout模板。 那么如果Layout模板使用的是继承自UmbracoTemplatePage (@inherits Umbraco.Web.Mvc.UmbracoTemplatePage)

,Layout模板默认的model就是RenderModel. 这种情况就会产生冲突,导致exception发生。因为我们的template继承自layout模板,但使用的确是MyCustomModle (@inherits Umbraco.Web.Mvc.UmbracoViewPage<MyCustomModel>)

解决这个问题,有两种方法

 

方法一:

改变Layout模板中的继承,现在Layout模板是@inherits Umbraco.Web.Mvc.UmbracoTemplatePage,改为继承自 Umbraco.Web.Mvc.UmbracoViewPage<dynamic>,这意味着对应的Model将会是dynamic这个类型,而不再是Umbraco.Web.Models.RenderModel

@inherits Umbraco.Web.Mvc.UmbracoViewPage<dynamic>

这样的话,我们的template继承自layout模板,并且使用@inherits Umbraco.Web.Mvc.UmbracoViewPage<MyCustomModel>, 就没有问题了

 

方法二

不改变Layout模板中的模板继承类型,也就是说还是@inherits Umbraco.Web.Mvc.UmbracoTemplatePage

但是改变我们模板中使用的MyCustomModel,让它继承自Umbraco.Web.Models.RenderModel

public class MyCustomModel : RenderModel
{
    //Standard Model Pass Through
    public MyCustomModel(IPublishedContent content) : base(content) { }

    //Custom properties here...
    public string MyProperty1 { get; set; }
    public string MyProperty2 { get; set; }
}

 

具体可参考 https://our.umbraco.org/documentation/Reference/Routing/custom-controllers

 

以上是关于Umbraco 的template使用的默认Model问题的主要内容,如果未能解决你的问题,请参考以下文章

Umbraco -- 在Visual Studio中新建一个View 如何在Umbraco back office 中显示出来

用 Umbraco 开发网站[2]:使用 Umbraco创建一个基本站点(上)

umbraco如何找到它的指数? Umbraco 8.0

xml Umbraco Forms的默认XML输出

Umbraco-Creating More Pages Using the Master - Part 2(翻译文档)

用 Umbraco 开发网站[1]:下载安装与初探