![](/img/trans.png)
[英]Scaffolded create View returns System.Web.Mvc.WebViewPage<TModel>.Model.get returned null. before post
[英]Linking PartialView to View returns System.Web.Mvc.WebViewPage<TModel>.Model.get returned null
我到處查找並嘗試了多種解決方案,但沒有一個可行。 在我的MVC網站上,我有一個購物車部分和一個結帳部分。 我想在結帳部分中做到這一點,我有一個小的購物車部分來顯示購物車。
這是我的局部視圖_CartItems.cshtml
@model IEnumerable<ArrowDefenseSystems.Models.Cart>
@{
ViewBag.Title = "Your Cart";
}
@if (Model != null)
{
foreach (var item in Model)
{
<div class="itemInfo row">
<img class="col-md-3" src="@Url.Content("~/Content/" + @Html.DisplayFor(modelItem => item.productImage))" height="100px">
<div class="CartItemText col-md-9">
<h3>@Html.DisplayFor(modelItem => item.productName)</h3>
<i>$@Html.DisplayFor(modelItem => item.productPrice)</i><br>
Quantity : @Html.DisplayFor(modelItem => item.quantityChosen)<br>
</div>
</div>
<hr />
}
}
當我單獨啟動Partial View時,它可以很好地顯示項目,並且一切運行正常。
這就是我將部分視圖鏈接到視圖Checkout.cshtml的方式
@model ArrowDefenseSystems.Models.ParentViewModel
...
...
@Html.Partial("_CartItems", Model.Cart)
當我運行此代碼時,我在上面的代碼中收到以下錯誤:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
System.Web.Mvc.WebViewPage<TModel>.Model.get returned null.
ParentViewModel:
public class ParentViewModel
{
public Checkout Checkout { get; set; }
public Cart Cart { get; set; }
}
Checkout控制器(更多功能,但不必要):
[HttpGet]
public ActionResult _CartItems()
{
return PartialView(db.Carts.ToList());
}
public ActionResult Checkout()
{
return View();
}
我已經嘗試了許多解決方案,但是都返回相同的錯誤。 我想念什么?
我認為這里有一個基本的誤解: @Html.Partial("_CartItems", Model.Cart)
將不會調用您的_CartItems()
動作。 相反,它將創建_CartItems.cshtml
部分視圖的新實例,並將Model.Cart
參數用作Model
。
在這種情況下,有兩個問題:
_CartItems.cshtml
期望使用類型為IEnumerable<ArrowDefenseSystems.Models.Cart>
的模型,而您正在將其傳遞為具有Cart
類型的模型(通過Model.Cart
參數) Checkout
操作中實例化Model.Cart
因此,要解決此問題,您首先應該將ParentViewModel
更改為:
public class ParentViewModel
{
public Checkout Checkout { get; set; }
public IEnumerable<Cart> Carts { get; set; }
}
然后,將您的Checkout
操作更新為:
public ActionResult Checkout()
{
var viewModel = new ParentViewModel
{
Carts = db.Carts.ToList()
}
return View(viewModel);
}
並將您對Model.Cart
的使用Model.Cart
為Model.Carts
(由於上述重命名)
之后,您可以刪除_CartItems
操作,因為它不再使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.