MVC - 如何在布局和视图中共享模型

时间:2013-02-18 17:06:36

标签: asp.net-mvc viewdata

我们有一个复杂的购物车结构。复杂性在于定价结构。需要相当数量的不同数据库实体来计算所有定价。由于复杂性,我们只为每个客户的购物车存储少量数据,当我们需要购物车时,我们会读取所有这些购物车数据以及数据库中的许多定价部件 - (编辑)并将结果输入到一个购物车对象,完整的总计。不幸的是,这在时间上相对昂贵。

我们的主站点布局(编辑)获取购物车对象并显示购物车的链接,并显示应付金额,如果购物车中有任何物品。

我们的网页可能会或可能不会显示购物车中的其他信息。例如,“关于我们”页面不需要购物车,但网站布局仍然需要它。

我为购物车设置了一个全局对象。我可以从主站点布局访问该对象。我也可以把它放到页面的viewmodel中。

因此,有时主站点布局会实例化购物车,而viewmodel会独立实例化购物车。

(编辑)所以网站布局需要购物车对象每页 - 并且页面可能或可能不需要购买购物车对象。

问题:视图可能有也可能没有可以放入ViewBag的购物车,因此主站点布局可以使用它。如何在生命周期中仅实例化购物车对象一次?

public class ShoppingCart
{
    // Complex, data intensive calculations upon instantiation
}

public class myViewModel
{
    public ShoppingCart cart {get; set;}
}

在主站点布局中:

@{
    ShoppingCart cart = new ShoppingCart(GlobalMemberID);
}

在需要购物车的页面中:

@model myViewModel

1 个答案:

答案 0 :(得分:1)

您可以将购物车实例存储到HttpContext.Items字典中,以便它在整个HTTP请求生命周期中都可用,并避免针对相同的数据两次访问数据库。