gpt4 book ai didi

asp.net-mvc - 将不同的模型传递给 RenderPartial()

转载 作者:行者123 更新时间:2023-12-02 20:09:09 25 4
gpt4 key购买 nike

我将一些部分 View 链接在一起,并且我需要一种在调用 RenderPartial() 时使用不同模型的方法。大多数关于 SO 的答案都说明要转换为模型类型,但这在编译时是未知的。

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

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

_TableList.cshtml 里面是我漂亮的表格。所以我现在想调用另一个部分 View ,它采用 Car 类型的模型列表,并输出表头和表体。同样,如果用户单击“平面”,这将加载包含平面模型列表的部分。

<table class="table prettyTable">
@{Html.RenderPartial((string)ViewBag.PartialToLoad, Model);}
</table>

在 _CarList.cshtml 中

@model IEnumerable<MyNamespace.Entities.Car>
<thead>...</thead>
<tbody>
@foreach (var item in Model)
{ ... }
</tbody>

这可以做到吗?或者我必须将模型放入 ViewBag 中并传递它?

编辑:感谢@Adas,我能够通过添加来解决这个问题

@model IEnumerable<dynamic>

到 _TableList.cshtml 的顶部。现在,当我调用 RenderPartial() 时,它不会提示“无法动态分派(dispatch)扩展方法”。现在效果很好:

<table class="table prettyTable">
@{Html.RenderPartial((string)ViewBag.PartialToLoad, Model);}
</table>

进一步编辑:我发现虽然上面的内容适用于 IEnumerable,但它不适用于 @model 动态。我发现可以通过这种方式调用 RenderPartial,这在本例中是有效的。

@{RenderPartialExtensions.RenderPartial(Html, (string)ViewBag.PartialToLoad, Model);}

其中ViewBag中的PartialToLoad是在 Controller 中设置的。

最佳答案

这里有 3 个选项:

  1. 使用动态模型,即@model IEnumerable<dynamic>
  2. 在您的模型上实现一些通用接口(interface)并使用它 @model IEnumerable<IYourCommonInterface>
  3. 从某个公共(public)类继承所有模型,就像 emre nevayeshirazi 评论的那样,@model IEnumerable<YourBaseClass> .

无论你是像Model一样传递你的模型,还是将它放入ViewBag中,你都需要上述方法之一来访问常用方法。

关于asp.net-mvc - 将不同的模型传递给 RenderPartial(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com