在显示模板中使用一个隐式转换为声明的@model的模型

本文关键字:一个 转换 声明 模型 @model 显示 | 更新日期: 2023-09-27 18:18:08

我有以下类:

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)
}

但是我得到以下错误:

传入字典的模型项的类型是'MyClass',但是这个字典需要一个'ExtendedMyClass'类型的模型项

是否有一种方法可以在不滚动自定义IModelBinder实现的情况下工作?

在显示模板中使用一个隐式转换为声明的@model的模型

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

var extended = (ExtendedMyClass)item;
@Html.DisplayFor(m => extended)
相关文章: