0

複雑なショッピングカート構造になっています。複雑さは価格設定構造にあります。すべての価格を計算するには、かなりの数の個別のデータベースエンティティが必要です。複雑なため、各顧客のショッピングカートのデータは少量しか保存されません。カートが必要な場合は、それらのカートデータのすべてと、データベースから多くの価格設定部分を読み取ります-(編集)結果を入力します合計で完了したショッピングカートオブジェクト。残念ながら、これは時間的に比較的費用がかかります。

マスターサイトのレイアウト(編集)は、ショッピングカートオブジェクトを取得し、ショッピングカートへのリンクを公開し、カートにアイテムがある場合は未払い額を表示します。

カートの他の情報が表示される場合と表示されない場合があるページがあります。たとえば、「About Us」ページにはカートは必要ありませんが、サイトレイアウトにはカートが必要です。

ショッピングカートのグローバルオブジェクトを設定しました。マスターサイトのレイアウトからそのオブジェクトにアクセスできます。ページのビューモデルに入れることもできます。

そのため、マスターサイトのレイアウトがショッピングカートをインスタンス化し、ビューモデルがショッピングカートを個別にインスタンス化する場合があります。

(編集)したがって、サイトレイアウトでは、すべてのページにショッピングカートオブジェクトが必要です。ページには、ショッピングカートオブジェクトが必要な場合と不要な場合があります。

問題:ビューには、マスターサイトのレイアウトで使用できるようにViewBagに入れることができるショッピングカートがある場合とない場合があります。ショッピングカートオブジェクトをライフサイクルで1回だけインスタンス化するにはどうすればよいですか?

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リクエストのライフサイクル全体で利用できるようにし、同じデータに対してデータベースに2回アクセスすることを回避できます。

于 2013-02-18T22:30:14.190 に答える