Skip to main content
 首页 » 编程设计

c#之实体 IEnumerable 仅获取基类之而不是派生类

2024年12月31日22webabcd

我创建了一个名为 Customer 的基类有两个派生类 PrivateCustomerBusinessCustomer 。 这是我的实体模型:

在我看来,我需要显示所有客户的列表。但我也想表明他们是企业客户还是私有(private)客户,并获取一些具体信息,例如私有(private)客户。

我的 View 需要模型@model IEnumerable<CarDealerMVC.Models.Customer>它通过 return View(db.CustomerSet.ToList()); 从 Controller 获取模型

但是,该列表不包含派生对象 - 仅包含基础对象 ( Customer )。因此,虽然我可以通过@if (item is Models.PrivateCustomer)检查它是企业还是私有(private)客户。 ,我无法打印 PrivateCustomer特定属性,例如心肺复苏术

我怎样才能做到这一点?

请您参考如下方法:

这可以使用 DisplayFor 模板来实现,为每个不同的具体元素类型声明 @Model 类型。

作为示例Shared/DisplayTemplates/PrivateCustomer.cshtml:

@Model PrivateCustomer 
@Model.Id 
@Model.Name 
@Model.Phone 
@Model.Cpr 
@Model.Genger 

Shared/DisplayTemplates/BusinessCustomer.cshtml:

作为示例Shared/DisplayTemplates/BusinessCustomer.cshtml:

@Model BusinessCustomer 
@Model.Id 
@Model.Name 
@Model.VatNumber 
@Model.Fax 

然后在您的 View 中,您需要按如下方式循环集合,使用反射在运行时定位模板:

@foreach(var item in Model) 
{ 
    @Html.DisplayFor(x => item, item.GetType().Name) 
} 

这种方式抽象出特定的具体实例,但不幸的是意味着公共(public)基本属性的重复,即 IdName 等。