2016-03-21 53 views
2

我在我的视图中有一个项目数组,并试图迭代该数组并将每个项目传递给局部视图,但它会引发异常,我正在尝试将整个数组传递给部分视图,而不仅仅是单个项目。将模型中的项目传递给局部视图不工作ASP.NET MVC 5

我的主视图:

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

我的局部视图:

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

异常消息:

传递到词典中的模型项的类型为“产品[] ',但这本字典需要一个'产品'类型的模型项目。

我在做什么错?

编辑 控制器绝对传递一个数组,这里虽然代码:

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中的阵列中。谢谢! –

相关问题