Search code examples
c#razorasp.net-coretag-helpers

C# Access child members of hierarchy with foreach


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>

Solution

  • 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>