I am trying to make Foreach work for the html razor below. At the end of the day, I want ShoppingCart to be a list of CartLines. I want to get rid of the [0] statement, and make it variable. Any solution or optimal method would help. Feel free to edit the class also.
class ShoppingCart
{
public IList<CartLine> Items { get; } = new List<CartLine>();
public ShoppingCart() {}
}
public class CartLine
{
public int CartLineId { get; set; }
public Product Product { get; set; }
public int Quantity { get; set; }
}
@model IEnumerable<ShoppingCart>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Items[0].Product)
</td>
Iterate over your list elements, not your class:
class ShoppingCart
{
public IList<CartLine> Items { get; } = new List<CartLine>();
public ShoppingCart() {}
}
public class CartLine
{
public int CartLineId { get; set; }
public Product Product { get; set; }
public int Quantity { get; set; }
}
@model ShoppingCart
@foreach (var item in Model.Items)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Product)
</td>
JohnB
so you are going to need a nested foreach:
@foreach (var cart in Model)
{
@foreach (var line in cart.Items )
{
@Html.DisplayFor(modelItem => line.Product)
}
}
来源:https://stackoverflow.com/questions/52798897/c-sharp-access-child-members-of-hierarchy-with-foreach