[英]How do I pass a partial view with a specific model if another partial view is using a different model?
我正在尝试查看我的页面上已在使用其他视图模型的购物车。 这是我的布局:
@RenderBody()
....
<div id="cd-shadow-layer"></div>
<div id="cd-cart">
@Html.Partial("_ItemsCartPartial", (Model as List<TShirtEmpAdmin.Models.Order>))
</div>
在主体中渲染的视图正在使用
@model TShirtEmpAdmin.ViewModels.ShirtOrdersViewModel
html部分正在渲染
@model IEnumerable<TShirtEmpAdmin.Models.Order>
传递到字典中的模型项的类型为“ ViewModels.ShirtOrdersViewModel”,但是此字典需要模型项的类型为“ Models.Order”。
我该如何解决?
发生错误是因为您的视图使用的是typeof ShirtOrdersViewModel
的模型,并且其布局正在调用需要List<Order>
的局部视图。 因为布局有
@Html.Partial("_ItemsCartPartial", (Model as List<Order>))
您正在尝试将模型ShirtOrdersViewModel
为List<Order>
,但失败,其结果与
@Html.Partial("_ItemsCartPartial", null)
当您传递null
作为模型时,该方法使用主视图的ViewDataDictionary
,因此该方法现在将ShirtOrdersViewModel
传递给部分期望的List<Order>
,因此是例外。
当前的实现方式意味着您的布局只能由模型为List<Order>
的视图使用(或者是从包含ModelList List<Order>
属性的BaseModel派生的模型,在这种情况下,您可以使用@Html.Partial("_ItemsCartPartial", Model.MyListOfOrdersProperty)
)。 但是,在您的情况下,这将是错误的方法,而应创建一个返回订单PartialView
的方法,例如
[ChildActionOnly]
public ActionResult Orders()
{
List<Order> orders = .... // get orders for the current user
return PartialView("_Orders", orders);
}
并且_Orders.cshtml
文件将具有@model List<Order>
以及用于显示它们的代码。 然后在布局中,使用渲染部分结果
@{ Html.RenderAction("Orders", yourControllerName); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.