ASP.NET MVC 3:具体实现的输出特定视图

我有一个基本类型的IEnumerable作为我的模型。

我需要在列表中显示不同的HTML,具体取决于具体类型。

因此,结果列表可能与HTML中的类似:

  • Points - Item 1 - 10 points Remove
  • Media - Item 2 - your_uploaded_image.jpg Remove
  • Content - Item 3 Remove

我可能会在稍后添加另一种类型,所以下面的解决方案并不是我真正想要的。

 @foreach(var item in Model) { if(item is PointImpl) { var pointItem = item as PointImpl; 
  • Points - @pointItem.Name - @pointItem.Points points Remove
  • } else if(item is MediaImpl) { var mediaItem = item as MediaImpl;
  • Media - @mediaItem.Name - @mediaItem.FileName Remove
  • } /* More implementations */ }

    我已经看过模型元数据模板提示,但这并没有真正帮助,因为我的模型是IEnumerable ..

    我正在考虑一个自定义Html Helper查看具体类型的属性,但是认为可能有内置的方法来做这个?

    而不是丑陋的foreach只需使用显示模板:

     @model IEnumerable 
      @Html.DisplayForModel()

    然后为所有子类型定义显示模板。 例如:

    ~/Views/Shared/DisplayTemplates/PointImpl.cshtml

     @model PointImpl 
  • Points - @Model.Name - @Model.Points points Remove
  • 和: ~/Views/Shared/DisplayTemplates/MediaImpl.cshtml

     @model MediaImpl 
  • Media - @Model.Name - @Model.FileName Remove
  • 看,没有更多的ifs,没有更多的循环,没有更多的变量。 一切都按惯例工作(模板必须位于~/Views/Shared/DisplayTemplates~/Views/SomeController/DisplayTemplates文件夹中,并且应该命名为具体类型的名称 – PointImpl.cshtmlMediaImpl.cshtml ,… )。 根据具体类型,将呈现相应的显示模板,并自动为主模型集合的每个元素。