在视图中呈现包含MVC继承的模型



我有一组不同类型的"利益",但都继承自BaseBenefit类。然后在视图上使用该List<BaseBenefit>。为了呈现它们,这里的最佳实践是什么?

我想通过视图中的if来检查选角,但这似乎打破了"愚蠢的IU"的规则。虽然我可以为每个利益包括一个属性,这样它就会有一个enum为它的真实类型,但我仍然需要检查哪个是哪个与if的。

任何想法?

您可以使用显示模板。所以在主视图中:

@Html.DisplayFor(x => x.Benefits)

其中Benefits是类型为List<BaseBenefit>的视图模型上的属性。现在您所要做的就是为不同的可能类型定义显示模板:

~/Views/Shared/DisplayTemplates/SpecificBenefit1.cshtml:

@model SpecificBenefit1
...

~/Views/Shared/DisplayTemplates/SpecificBenefit2.cshtml:

@model SpecificBenefit2
...

显示模板的位置和名称很重要。它们必须位于~/Views/Shared/DisplayTemplates文件夹中,或者如果它们不会在控制器之间重用,你也可以在~/Views/SomeController/DisplayTemplates文件夹中定义它们。模板名必须与列表中元素的类型相同。

当你在一个可枚举属性的主视图中使用DisplayFor时。. NET MVC将自动为列表中的每个元素调用相应的显示模板。

最新更新