2013-04-10 20 views
8

MVCサイト内のすべてのページに選択した項目の数を表示します。私は、私が欲しいの特性がMVC 4 _Layout.cshtml viewmodel

public class CartViewModel 
{ 
    public List<CartItem> CartItems { get; set; } 
    public decimal CartTotal { get; set; } 
} 

カートを取得し、コントローラを定義するのViewModelを持つビューモデルにマッピングし、

public ActionResult GetCartSummary() 
{ 
    var cart = Cart.Instance; 
    var viewModel = AutoMapper.Mapper.Map<Cart, CartViewModel>(cart); 
    return View(viewModel); 
} 

とその

のためのビューの上にあることを渡します
@model TheWorkshop.Web.Models.Edit.ShoppingCartViewModel 

<h2>Cart Summary</h2> 
<span>@Model.CartTotal</span> 

、最終的には私の_Layout.cshtmlファイル内

@Html.Action("GetCartSummary", "Cart") 

しかし、これは私に

System.StackOverflowExceptionを与えたあなたのカートで表示するには、次の追加未処理

答えて

6

試してみてください。

@{Layout = null;} 
+1

非常にいいです、これはcoです起立。ビューは再帰しています。 –

+0

これはうまく動作します。 –

3

を見るのではなく、PartialViewを返す試してみてください。

public ActionResult GetCartSummary() 
{ 
    var cart = Cart.Instance; 
    var viewModel = AutoMapper.Mapper.Map<Cart, CartViewModel>(cart); 
    return PartialView(viewModel); 
} 
+0

'PartialView'が' Layout = null'を暗黙的に設定しているので、これもうまくいくでしょう。 –

+0

他の場所で使用する必要がある場合は、一部のビューのみを使用するように指示されました。これは推奨されるアプローチですか? –

+0

PartialViewは、別のビューでビューをネストするときはいつでも使用します。そうしないと、ビューがネストされている場所を囲むすべてのレイアウトが取得されるためです。私。あなたのヘッダーMenus/LOGOは複製され、ひどく見えます。 – AaronLS