2016-03-21 4 views
2

Ich habe ein Array von Elementen in meiner Ansicht und versuche, über dieses Array zu iterieren und jedes Element an eine Teilansicht zu übergeben, jedoch löst es eine Ausnahme aus Ich versuche, das gesamte Array und nicht nur das einzelne Element an die Teilansicht zu übergeben.Übergabe von Element in Modell zu Teilansicht funktioniert nicht ASP.NET MVC 5

Meine Hauptansicht:

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

Meine Teilansicht:

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

Die Ausnahmemeldung:

Das Modellelement in das Wörterbuch übergeben vom Typ ‚Produkt [] ', aber dieses Wörterbuch benötigt ein Modellelement vom Typ' Produkt '.

Was mache ich falsch?

bearbeiten Der Controller definitiv ein Array ist vorbei, hier ist der Code aber:

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

Und die 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

Hallo, könnten Sie den Code in der Steuerung zur Verfügung stellen, das Modell zur Ansicht vorbei? Markup sieht gut aus. –

Antwort

4

Wenn ein Element auf Partial geben null ist, wird es Pass Elternsicht Model stattdessen. Wenn also das Element in Array null ist, wird das Ansichtsmodell des übergeordneten Elements an Partial übergeben.

Sie könnten überprüfen, ob ein Element im Array, über das Sie iterieren, nicht null ist oder @Html.Partial("_ProductDetail", new ViewDataDictionary(item)).

Foreach Ansatz:

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

Viewdatadictionary Ansatz:

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

Ah, habe es gefunden. Ich habe vergessen, das zweite Produkt zum Array in meinem FakeDb hinzuzufügen. Vielen Dank! –

Verwandte Themen