0

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

我们的主站点布局(编辑)获取购物车对象并公开一个指向购物车的链接并显示到期金额(如果购物车中有任何物品)。

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

我为购物车设置了一个全局对象。我可以从主站点布局访问该对象。我也可以将它放入页面的视图模型中。

所以有时主站点布局实例化购物车,视图模型独立实例化购物车。

(编辑)所以网站布局需要每个页面的购物车对象 - 页面可能需要也可能不需要购物车对象。

问题:视图可能有也可能没有可以放入 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
4

1 回答 1

1

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

于 2013-02-18T22:30:14.190 回答