asp.net-mvc - 在 View 中呈现包含 MVC 继承的模型

标签 asp.net-mvc model-view-controller view

我有一组不同类型的“好处”,但都继承自 BaseBenefit类(class)。那List<BaseBenefit>然后用于 View 。为了展示它们,最佳实践是什么?

我想通过 if's in the view 进行检查,但这似乎打破了“愚蠢的 IU”的规则。不过,我可以为每个好处包含一个属性,以便它具有 enum因为它是真实类型,但我仍然需要用 if 来检查哪个是哪个。

有什么想法吗?

最佳答案

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

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

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

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

@model SpecificBenefit1
...

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

@model SpecificBenefit2
...

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

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

关于asp.net-mvc - 在 View 中呈现包含 MVC 继承的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8455392/

相关文章:

c# - 我想同时在两个模型上应用 for-each 循环 Asp.Net MVC

c# - 与 ASP Net MVC 应用程序一起使用的 Entity Framework 术语

model-view-controller - 是用于商业计算机游戏的MVC设计模式

如果最初为零,Android 不会为 alpha 设置动画

ruby-on-rails - Rspec View 规范被 default_locale 破坏

asp.net-mvc - 限制来自 WebApi Controller 和 ODATA w/Nhibernate 的服务器端结果

javascript - Microsoft Ajax 脚本扩展 - 在 ASP.NET AJAX 和 ASP.NET MVC 中是否相同?

ruby-on-rails - rails 中的 action_name 方法有多可靠?

model-view-controller - Extjs 4 MVC 从 Controller 加载 View

android - 如何在 android 中按 Y 轴旋转 View ?