我正在将一些部分视图链接在一起,并需要一种方法在调用RenderPartial()时使用不同的模型。大多数stackoverflow上的答案都建议强制转换为模型类型,但这在编译时是无法知道的。
该网站有不同的类别,例如汽车、飞机、直升机和船只。当用户点击汽车链接时,汽车控制器的索引页面会以漂亮的表格显示所有汽车。其他类别也是如此。 所有表格都是相同的,因此我想使用部分视图来重用代码。
在_TableList.cshtml中有一个漂亮的表格。现在我想调用另一个部分视图,它需要一个类型为Car的模型列表,并输出表头和正文。同样地,如果用户点击了Planes,这将加载一个接受Plane模型列表的部分视图。
将代码添加到_TableList.cshtml的顶部。现在,当我调用RenderPartial()时,它不会抱怨“扩展方法无法动态调度”。这个现在完美地工作了:
进一步编辑:我发现尽管上面的方法可以与IEnumerable一起使用,但无法与@model dynamic一起使用。我发现可以这样调用RenderPartial,在这种情况下可以正常工作。
该网站有不同的类别,例如汽车、飞机、直升机和船只。当用户点击汽车链接时,汽车控制器的索引页面会以漂亮的表格显示所有汽车。其他类别也是如此。 所有表格都是相同的,因此我想使用部分视图来重用代码。
@model IEnumerable<MyNamespace.Entities.Car>
@{Html.RenderPartial("Partials/_TableList", Model);}
在_TableList.cshtml中有一个漂亮的表格。现在我想调用另一个部分视图,它需要一个类型为Car的模型列表,并输出表头和正文。同样地,如果用户点击了Planes,这将加载一个接受Plane模型列表的部分视图。
<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()时,它不会抱怨“扩展方法无法动态调度”。这个现在完美地工作了:
<table class="table prettyTable">
@{Html.RenderPartial((string)ViewBag.PartialToLoad, Model);}
</table>
进一步编辑:我发现尽管上面的方法可以与IEnumerable一起使用,但无法与@model dynamic一起使用。我发现可以这样调用RenderPartial,在这种情况下可以正常工作。
@{RenderPartialExtensions.RenderPartial(Html, (string)ViewBag.PartialToLoad, Model);}
在控制器中设置了 ViewBag 中的 PartialToLoad。