2013-04-10 20 views
8

MVC sitemde her sayfada seçilen öğelerin sayısını görüntülemek istiyorum. İstediğim özellikler tanımlayan ViewModel var oradaMVC 4 _Layout.cshtml viewmodel

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

, Cart alır görünüm modeline bunu eşler ve geçen bir kontrolör olduğu

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

ve bu

için bir görünümde
@model TheWorkshop.Web.Models.Edit.ShoppingCartViewModel 

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

ve nihayet benim _Layout.cshtml dosyasında

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

Ama bu bana

System.StackOverflowException verir oldu sepetinize görünümüne aşağıdaki ekleyerek işlenmeyen

cevap

6

Dene:

@{Layout = null;} 
+1

Çok güzel, bu co rrect. Görüşler tekrarlıyor. –

+0

Bu güzel çalışır; –

3

View yerine PartialView dönen deneyin:

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

yinelenen görüşler olduğunu asla tahmin edemezdi Bu da 'PartialView' örtük olarak 'Layout = null' ayarlar çünkü çalışacaktır. –

+0

Birisi, başka bir yerde kullanmanız gerektiğinde yalnızca kısmi bir görünüm kullanmamı söyledi. Bu önerilen bir yaklaşım mı? –

+0

Başka bir görünümde bir görünümü yerleştirdiğinizde, bir Kısmi Görünüm kullanabilirsiniz, aksi halde, görünümün iç içe geçtiği yeri çevreleyen tüm düzen öğelerinizi alırsınız. Yani başlığınız Menüler/LOGO çoğaltılacak ve korkunç görünecektir. – AaronLS