2016-03-21 9 views
2

私はビューのアイテムの配列を持っていて、その配列を反復して各アイテムを部分ビューに渡そうとしていますが、私は部分的なビューに単一の項目だけでなく全体の配列を渡そうとしています。モデルのアイテムを部分ビューに渡しても機能しないASP.NET MVC 5

マイメインビュー:

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

マイ部分図:

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

例外メッセージ:

辞書に渡さモデル項目タイプ「の生成物です[] 'が、この辞書には' Product '型のモデル項目が必要です。

私は間違っていますか?

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

そして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

こんにちは、あなたは、ビューにモデルを渡すコントローラにコードを提供するだろうか?マークアップは正常に見えます。 –

答えて

4

Partialに渡された要素がnullである場合には、それは意志

編集 コントローラは間違い配列を渡しているが、ここにかかわらずコードです代わりに親ビューModelを渡してください。したがって、Product[]配列の要素がnullの場合、親のビューモデルはPartialに渡されます。

反復処理中の配列の要素がnullでないか、または@Html.Partial("_ProductDetail", new ViewDataDictionary(item))であるかどうかを確認できます。

のforeachアプローチ:

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

ViewDataDictionaryアプローチ:

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

ああ、見つかりました。私のFakeDbの配列に2番目の製品を追加するのを忘れてしまった。ありがとう! –

関連する問題