我创建了一个名为 Customer
的基类有两个派生类 PrivateCustomer
和BusinessCustomer
。 这是我的实体模型:
在我看来,我需要显示所有客户的列表。但我也想表明他们是企业客户还是私有(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)基本属性的重复,即 Id
、Name
等。