我正在尝试在我的页面上查看已经使用不同视图模型的购物车。这是我的布局:
@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 partial渲染
@model IEnumerable<TShirtEmpAdmin.Models.Order>
传递到字典中的模型项类型为&#39; ViewModels.ShirtOrdersViewModel&#39;,但此字典需要类型为&#39; Models.Order&#39;的模型项。
我该如何解决这个问题?
答案 0 :(得分:2)
发生错误是因为您的视图使用的是ShirtOrdersViewModel
类型的模型,并且其布局正在调用期望List<Order>
的部分。因为布局有
@Html.Partial("_ItemsCartPartial", (Model as List<Order>))
您正在尝试将ShirtOrdersViewModel
转换为List<Order>
的模型失败,其结果与
@Html.Partial("_ItemsCartPartial", null)
当您将null
作为模型传递时,该方法使用主视图的ViewDataDictionary
,因此该方法现在将ShirtOrdersViewModel
传递给部分期望List<Order>
,因此例外。
您当前的实现意味着您的布局只能由模型为List<Order>
的视图使用(或者是从包含属性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); }