在每个页面上显示购物车项目为部分视图?

时间:2013-04-15 00:09:03

标签: asp.net-mvc asp.net-mvc-4 partial-views

我正在构建一个与MVCMusicStore非常相似的mvc Web应用程序。我想在屏幕右上角的一个小列表中显示我的购物车项目,以便用户可以在任何给定的时刻看到购物车中的内容。我在局部视图中有这个:

@model ProOptInteractive.ViewModels.ShoppingCartViewModel
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
    @foreach (var item in Model.CartItems)
    {

  <li><a tabindex="-1" href="#">@item @item.Count</a></li>
    }
    <li class="divider"></li>
    <li><a tabindex="-1" href="#"></a></li>
</ul>

并且_Layout.cshtml文件中的部分视图是

@{Html.RenderAction("CartSize", "ShoppingCart");}

每当我运行程序时,我得到的Object引用未设置为对象错误的实例,与@foreach (var item in Model.CartItems)有关,即使我直接从购物车索引页的代码中复制,我仍然得到这个错误。除非我点击AddToCart,否则不会显示购物车。

请告知

1 个答案:

答案 0 :(得分:1)

我设法通过在ShoppingCartControlled中添加一个几乎与Index方法相同的方法来修复它,名为CartSummary并返回一个PartialView:

public ActionResult CartSummary()
    {
        var cart = ShoppingCart.GetCart(this.HttpContext);

        // Set up our ViewModel
        var viewModel = new ShoppingCartViewModel
        {
            CartItems = cart.GetCartItems(),
            CartTotal = cart.GetTotal()
        };
        // Return the view
        return PartialView(viewModel);
    }

这是唯一似乎“包含”任何购物车商品的方法。我通过@{Html.RenderAction("CartSummary", "ShoppingCart");}

引用了它

感谢所有人的贡献!