我的视图中有一个项目数组,我正在尝试迭代该数组并将每个项目传递给局部视图,但是它会抛出一个异常,说我正在尝试传递整个数组而不仅仅是单个数组项目到局部视图。
我的主要观点:
@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" };
}
}
答案 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))