2015-10-18 67 views
0

我有下面的类隐式转换为声明@model模型:使用具有在显示模板

public class MyClass 
{ 
    public int Number {get; set;} 
} 

和扩展版:

public class ExtendedMyClass 
{ 
    public MyClass Data {get; set;} 
    public ExtendedMyClass(MyClass data) 
    { 
     Data = data; 
    } 
    public static implicit operator ExtendedMyClass(MyClass data) => return new ExtendedMyClass(data); 
} 

在显示模板我有@model ExtendedMyClass

我想能够做到以下几点:

foreach(var item in AllData)/* AllData is a list that contains a mix of MyClass and ExtendedMyClass*/ 
{ 
    @Html.DisplayFor(m => item) 
} 

,但我得到了以下错误:

The model item passed into the dictionary is of type 'MyClass', but this dictionary requires a model item of type 'ExtendedMyClass'

有没有一种方式,这不滚动定制IModelBinder实施工作?

回答

1

运行时不知道应该使用哪种类型。它只看到原始类型。只需使用显式转换:

var extended = (ExtendedMyClass)item; 
@Html.DisplayFor(m => extended) 
+0

然后我得到如下:'模板只能与现场访问,访问属性,一维数组的索引,或单参数自定义索引expressions.'无论我用使用' (MyExtendedClass)item' or'new ExtendedMyClass(item)' –

+0

这也不起作用,因为“列表包含MyClass和ExtendedMyClass的混合”,所以演员阵容将失败 –

+0

@Alex不,它不会。 'MyClass'有一个隐式运算符。请参阅http://ideone.com/S6sdGJ。 – CodeCaster