簡體   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