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问题的更多相关文章

  1. ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例

    在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...

  2. 解决Umbraco中Generated文件夹下面model问题

    在Visual Studio中开发Umbraco项目时,有一个文件夹叫Generated, 在Umbraco 的back office中的Document Type产生的model都会自动进入这个文件 ...

  3. MVC中的默认Model绑定者DefaultModelBinder

    一.题外话 接续上一篇: MVC中Action参数绑定的过程 public IModelBinder DefaultBinder { get { if (this._defaultBinder == ...

  4. 【已解决】iView-admin Editor 组件 绑定默认值问题

    iView-admin Editor 组件 绑定默认值问题 发现 editor 组件,设置v-model 后, 修改 v-model 数据, editor组件没有自动渲染,需要手动设置渲染  this ...

  5. backbone.js 教程(1) View & Model & Collection

    Backbone.js Overview 它由Jeremy Ashkenas开发,最初发行于2010-10-13 它是一个轻量的JavaScript类库,只依赖于underscore.js,非强制依赖 ...

  6. ASP.NET MVC Model验证(四)

    ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...

  7. ASP.NET MVC Model绑定(六)

    ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...

  8. ASP.NET MVC Model绑定(五)

    ASP.NET MVC Model绑定(五) 前言 前面的篇幅对于IValueProvider的获取位置和所处的生成过程做了讲解,本篇将会对IValueProvider的使用做个基础的示例讲解,读完本 ...

  9. ASP.NET MVC Model绑定(四)

    ASP.NET MVC Model绑定(四) 前言 前面的篇幅对于Model绑定器IModelBinder以及实现类型.Model绑定器提供程序都作了粗略的讲解,可以把Model绑定器想象成一个大的容 ...

随机推荐

  1. 【DP】最长不下降子序列问题(二分)

    Description 给你一个长度为n的整数序列,按从左往右的顺序选择尽量多的数字并且满足这些数字不下降. Thinking 朴素dp算法:F[i]表示到第i位为止的最长不下降子序列长度 F[i]= ...

  2. js 数组的所有操作

    js的数组操作有很多,这里记录了常用的和不常用的数组操作方法. 一.数组的创建 数组的创建有两种方法,一种是通过字面量,另一种是通过Array构造函数. 1.字面量 var num1 = [1,2,3 ...

  3. 修改push动画的方向

    CATransition *animation = [CATransition animation]; animation.duration = 0.4; animation.timingFuncti ...

  4. RabbitMQ之Exchange Topics模式

    说明:此模式实在路由key模式的基础上,使用了通配符来管理消费者接收消息.生产者P发送消息到交换机X,type=topic,交换机根据绑定队列的routing key的值进行通配符匹配: 符号#:匹配 ...

  5. Oracle角色管理

    --创建角色 create role role_name [not identified |--无需验证的方式 identified by [password]--密码验证的方式 | identifi ...

  6. Linux下c++11多线程聊天室

    刚看的c++11多线程,写个聊天室试试编译的时候加上 c++11 和 多线程库g++ -Wall -std=c++0x -pthread -o server server.cppserver 和cli ...

  7. jmeter-接口的依赖

    接口的依赖 接口2要用到接口1中返回的数据 大致思路:建立接口1和接口2,把接口1中的yangli字段传递给接口中的入参date里 步骤如下: 1.接口1 2\新建一个HTTP请求,命名为老黄历接口2 ...

  8. Javascript-- jQuery DOM篇(二)

    DOM拷贝clone() 克隆节点是DOM的常见操作,jQuery提供一个clone方法,专门用于处理dom的克隆 .clone()方法深度 复制所有匹配的元素集合,包括所有匹配元素.匹配元素的下级元 ...

  9. stl_set.h

    stl_set.h // Filename: stl_set.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http://blo ...

  10. aac格式介绍

    AAC编码后数据打包到FLV很简单. 1. FLV音频Tag格式                              字节位置    意义0x08,                       ...