2016-03-21 14 views
2

Görünümlerimde bir dizi öğe var ve bu dizi üzerinde yineleme yapmaya çalışıyorum ve her öğeyi bir kısmi görünüme geçiriyorum, ancak bunun bir istisna atar Kısmi görünüme sadece tek bir öğe yerine tüm diziyi geçmeye çalışıyorum.Kısmi görünümde modelde öğe geçirme çalışmıyor ASP.NET MVC 5

Benim asıl görünüm:

@model Product[] 
@foreach (var item in Model) 
{ 
    @Html.Partial("_ProductDetail", item) 
} 

Benim kısmi görünümü:

@model Product 
<div> 
    @Model.Description 
</div> 

istisna mesajı:

sözlüğe geçirilen modeli madde türüdür

'Ürün [] ', ancak bu sözlük' Ürün 'tipi bir model öğesi gerektirir.

Neyi yanlış yapıyorum?

public ActionResult Category(string id) 
{ 
    var model = FakeDb.Products; 
    return View(model); 
} 

Ve FakeDb:

public static class FakeDb 
{ 
    public static Product[] Products { get; set; } 

    static FakeDb() 
    { 
     Products = new Product[2]; 
     DateTime utcNow = DateTime.UtcNow; 

     ProductPic pp1 = new ProductPic { Filename = "71b.jpg", Default = true }; 
     Product p1 = new Product { DateAdded = utcNow, Price = 395, Quantity = 1, Pics = new List<ProductPic> { pp1 }, Description = "5 ft. x 8 ft. Blue, Yellow" }; 
     Products[0] = p1; 

     ProductPic pp2 = new ProductPic { Filename = "72b.jpg" }; 
     Product p2 = new Product { DateAdded = utcNow.AddDays(-1), Quantity = 2, Pics = new List<ProductPic> { pp2 }, Description = "5 ft. x 8 ft. Blue, Green" }; 
    } 
} 
+1

Merhaba, görünümüne modelini geçen denetleyici kod sağlayabilir? İşaretleme iyi görünüyor. –

cevap

4

Partial geçirilen bir öğesi boş olduğunda, olacak

Düzenleme kontrolör kesinlikle bir dizi geçiyor, burada olsa kod üst görünümden geçmek Model. Yani Product[] dizisindeki öğe boşsa, ebeveynin görünüm modeli Partial'a geçirilir.

Yinelemekte olduğunuz dizideki herhangi bir öğenin null olmadığını veya @Html.Partial("_ProductDetail", new ViewDataDictionary(item)) geçirip geçirmediğini kontrol edebilirsiniz.

Foreach yaklaşım:

@model Product[] 
@foreach (var item in Model) 
{ 
    if (item != null) 
    { 
     @Html.Partial("_ProductDetail", item) 
    } 
} 

ViewDataDictionary yaklaşım:

@Html.Partial("_ProductDetail", new ViewDataDictionary(item)) 
+0

Ah, bulundu. FakeDb'imde diziye ikinci ürünü eklemeyi unuttum. Teşekkürler! –