Search code examples
c#asp.net-coreforeachrazor-pagesasp.net-core-3.1

How to iterate a list row by row in ASP.NET Core 3.1


I have a list<> and I need to pass each row of the list to a stored procedure.

I am currently having a for each loop to count number of rows in the loop and iterate that many number of times. but it is iterating the first row only each time. Instead I want to go to next row each time.

I am building a web application using ASP.NET Core Razor pages and I do not want to use MVC architecture as I feel it is too complicated for me.

[BindProperty]
public OrderProduct OrderProduct { get; set; }
public async Task<IActionResult> OnPostSaveOrder()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }
    cart = SessionHelper.GetObjectFromJson<List<OrderProduct>>(HttpContext.Session, "ProductCart");
    for (var i = 0; i < cart.Count; i++)
    {
        objProduct.AddProductsToOrder(OrderProduct);
    }
    await _context.SaveChangesAsync();
    HttpContext.Session.Clear();
    return RedirectToPage("./Index");
}

Solution

  • Per @Codexer's answers in the comments, this can be achieved by changing your loop to the following:

    for (var i = 0; i <= cart.Count; i++)
    {
        objProduct.AddProductsToOrder(cart[i]);
    }
    

    Notably, this changes:

    • < cart.Count to <= cart.Count
    • objProduct.AddProductsToOrder(OrderProduct) to objProduct.AddProductsToOrder(cart[i])

    That said, a simple foreach would work much better, since you don't otherwise need the incrementor. This would look something like:

    foreach (var product in cart) 
    { 
        objProduct.AddProductsToOrder(product); 
    }