繁体   English   中英

如果另一个局部视图使用其他模型,如何传递具有特定模型的局部视图?

[英]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>))

您正在尝试将模型ShirtOrdersViewModelList<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM