将Model中的项传递给部分视图不能正常工作ASP.NET MVC 5

时间:2016-03-21 16:25:57

标签: c# asp.net-mvc razor

我的视图中有一个项目数组,我正在尝试迭代该数组并将每个项目传递给局部视图,但是它会抛出一个异常,说我正在尝试传递整个数组而不仅仅是单个数组项目到局部视图。

我的主要观点:

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

我的部分观点:

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

异常消息:

  

传递到字典中的模型项的类型为“Product []”,但此字典需要“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 个答案:

答案 0 :(得分: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))