【发布时间】:2014-08-14 21:50:42
【问题描述】:
我的 MVC 5 应用程序中有以下内容。我有 3 个用于燃料类型汽车的标签,它们是柴油/汽油/电动汽车。我在 3 个部分视图中有这些 - 类似于:
@model MyProj.DieselviewModel
<p>
@{ Html.RenderPartial("_CarDetails"); }
</p>
Petrol 和 Electric 的局部视图然后分别采用 PetrolViewModel 和 ElectricViewModel,并且所有三个都渲染采用 CarDetailsViewModel 的局部视图 _CarDetails。
注意我的 DieselViewModel 在下面:
public class DieselViewModel : CarDetailsViewModel
{
public override CarFuelTypeEnum CarFuelType
{
get { return CarFuelTypeEnum.Diesel; }
set { base.CarFuelType = value; }
}
}
所以这里为每种燃料类型设置了燃料类型枚举,然后在我拥有的 CarDetailsViewModel 中:
public virtual CarFuelTypeEnum CarFuelType{ get; set; }
因此,在我的 _CarDetails Partial 视图中,我知道哪个 FuelType 是使用我拥有的 ModelBuilder 类设置的,该类使用泛型来新建一个 T() 类型的模型,该模型将是 DieselViewModel/PetrolViewModel 或 ElectricViewModel。
这很好用,直到我想在我的 _CarDetails 页面中创建另一个局部视图 - 以呈现一些其他细节:
所以我的 CarDetailsViewModel 类似于(为简单起见,删除了大多数属性)
public class CarDetailsViewModel
{
public string Name { get; set; }
public SomeOtherClass OtherClass{ get; set; }
public class SomeOtherClass
{
public double Field1{ get; set; }
}
}
我的 _CarDetails 部分是这样的:
@model MyProj.CarDetailsViewModel
@Html.RenderPartial("_AnotherPartial", Model.OtherClass);
_AnotherPartial 顶部定义的模型是:
@model MyProj.CarDetailsViewModel.OtherClass
但是,即使我试图将该模型类传递给 _AnotherPartial,我也会在此处抛出一个错误,说我正在传递 CarDetailsViewModel,但字典需要 'DieselViewModel' 或 PetrolViewModel 或 ElectricViewModel 类型的模型,即我的第一个父视图
但是,根据我对 DieselViewModel 的定义 - public class DieselViewModel : CarDetailsViewModel 不是 CarDetailsViewModel,然后我可以将其传递给 _AnotherPartial 页面吗?
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-5