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");
}
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);
}