2013-02-18 56 views
0

我們有一個複雜的購物車結構。複雜性在於定價結構。需要大量不同的數據庫實體來計算所有的定價。由於其複雜性,我們僅爲每個客戶的購物車存儲少量數據,而當我們需要購物車時,我們會讀取所有這些購物車數據以及數據庫中的許多定價部分 - (編輯)並將結果寫入購物車物品,完成​​總計。這不幸的是在時間上相對昂貴。MVC - 我如何在佈局和視圖中共享模型

我們的主站點佈局(編輯)獲取購物車對象並顯示購物車的鏈接,並顯示應付金額,如果購物車中有任何物品。

我們的網頁可能會顯示或不顯示購物車中的其他信息。例如,「關於我們」頁面不需要購物車,但網站佈局仍然需要它。

我爲購物車設置了一個全局對象。我可以從主站點佈局訪問該對象。我也可以把它放到頁面的視圖模型中。

因此,有時主站點佈局實例化購物車,並且視圖模型獨立實例化購物車。

(編輯)因此,網站佈局需要每個網頁的購物車對象 - 而且網頁可能不需要購物車對象。

問題:該視圖可能有也可能沒有可放入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 
+0

如果關於我們的頁面需要它,然後在控制器中計算它。你已經知道你需要它,所以在視圖被調用之前做好它。 – jcolebrand 2013-02-18 19:52:47

+0

jcolebrand - 感謝您的回覆。如果頁面需要它,我可以在控制器中進行計算,然後將購物車傳送到視圖中,然後視圖可以將購物車傳遞到佈局中。但是,如果網頁不需要它,那麼佈局如何獲得購物車的副本?另外,如果在別的地方需要它,我該如何移動它?我的問題是:是否有一種方法可以僅按請求實例化,然後使其具有「全局」可用性? – Cary 2013-02-18 21:27:40

+0

對於您所描述的內容,我會將其視爲「放入基本控制器」。 – jcolebrand 2013-02-18 23:06:35

回答

1

您可以在購物車實例存儲到HttpContext.Items字典,以便它在整個HTTP請求生命週期中都可用,並避免在相同的數據中擊中數據庫兩次。

+0

謝謝!我只是嘗試過,它適用於我。我正在使用Session,但會話在請求中持續存在的方式對我來說存在問題。 – Cary 2013-02-18 22:42:50

相關問題