Asp.net mvc 向RenderPartial()传递不同的模型

Asp.net mvc 向RenderPartial()传递不同的模型,asp.net-mvc,razor,Asp.net Mvc,Razor,我正在将一些局部视图链接在一起,我需要一种在调用RenderPartial()时使用不同模型的方法。关于SO的大多数答案都表示要强制转换为模型类型,但这在编译时是未知的 该网站有不同的类别,如汽车、飞机、直升机和船只。当用户点击Cars链接时,汽车控制器的索引页面会显示一个漂亮的表格中的所有汽车。飞机等也一样。 所有的表都是相同的,所以我想使用部分视图来重用代码 @model IEnumerable<MyNamespace.Entities.Car> @{Html.RenderPar

我正在将一些局部视图链接在一起,我需要一种在调用RenderPartial()时使用不同模型的方法。关于SO的大多数答案都表示要强制转换为模型类型,但这在编译时是未知的

该网站有不同的类别,如汽车、飞机、直升机和船只。当用户点击Cars链接时,汽车控制器的索引页面会显示一个漂亮的表格中的所有汽车。飞机等也一样。 所有的表都是相同的,所以我想使用部分视图来重用代码

@model IEnumerable<MyNamespace.Entities.Car>
@{Html.RenderPartial("Partials/_TableList", Model);}

其中ViewBag中的PartialToLoad在控制器中设置。

此处有3个选项:

  • 使用动态模型,即
    @model IEnumerable
  • 在您的模型上实现一些通用接口并使用它
    @model IEnumerable
  • 从一些公共类继承所有模型,如emre nevayeshirazi评论的,
    @model IEnumerable

  • 不管您是传递模型类模型,还是将其放在ViewBag中,您都需要上述方法之一来访问常用方法。

    为什么不为您的模型使用多态性?
    <table class="table prettyTable">
    @{Html.RenderPartial((string)ViewBag.PartialToLoad, Model);}
    </table>
    
    @model IEnumerable<MyNamespace.Entities.Car>
    <thead>...</thead>
    <tbody>
    @foreach (var item in Model)
    { ... }
    </tbody>
    
    @model IEnumerable<dynamic>
    
    <table class="table prettyTable">
    @{Html.RenderPartial((string)ViewBag.PartialToLoad, Model);}
    </table>
    
    @{RenderPartialExtensions.RenderPartial(Html, (string)ViewBag.PartialToLoad, Model);}