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