BiblioAdmin model binding 1 op n
We moeten nog leren hoe we 1 of meerdere orderitems aan een order kunnen toevoegen. Alle voorbeeldcode vind je terug op Bitbucket Programmeren 3.
Video
Stappenplan
- In de
ReadingOne
vanOrder
een lijst vanOrderItems
toevoegen:- Een
OrderItemList
vullen in deOnGet
methode van deOrderModel
klasse in het ReadingOne.cshtml.cs bestand:- voeg een property toe:
public List<Bll.OrderItem> OrderItemList { get; set; }
- pas de
OnGet
methode aan:public void OnGet(int? id) { this.Order = dbContext.Order.SingleOrDefault(m => m.Id == id); Order.ShippingMethod = dbContext.ShippingMethod.SingleOrDefault(m => m.Id == this.Order.ShippingMethodId); Order.Status = dbContext.OrderStatus.SingleOrDefault(m => m.Id == this.Order.StatusId); Order.Customer = dbContext.Customer.SingleOrDefault(m => m.Id == this.Order.CustomerId); OrderList = dbContext.Order.ToList(); OrderItemList = dbContext.OrderItem.ToList(); }
- voeg een property toe:
- In de ReadingOne.cshtml view de html toevoegen om de lijst van orderitems voor de geselecteerde order te tonen:
<h2>Order Items</h2> <table class="list"> <thead> <tr> <th> </th> <th> BookId </th> <th> OrderId </th> <th> Quantity </th> </tr> </thead> <tbody> @foreach (var item in Model.OrderItemList) { <tr> <td> <a href="OrderItem/DeleteOne/@item.Id">Delete</a> | </td> <td> @item.BookId </td> <td> @item.OrderId </td> <td> @item.Quantity </td> </tr> } </tbody> </table>
- Een
- Voeg de methode
OnPostInsertOrderItem
in deOrderModel
klasse toe:public ActionResult OnPostInsertOrderItem(Bll.OrderItem orderItem) { if (!ModelState.IsValid) { // als er een foutief gegeven is ingetypt ga terug // de pagina en toon de fout return Page(); // return page, nog een nieuwe ingeven } // dbContext.OrderItem.Update(orderItem); dbContext.OrderItem.Add(orderItem); dbContext.SaveChanges(); // keer terug naar de ReadingOne pagina van Order return RedirectToPage("ReadingOne"); }
- Voeg een property toe:
public Bll.OrderItem OrderItem { get; set; }
- In
ReadingOne
view vanOrder
eenform
toevoegen om eenOrderItem
te kunnen inserten:<h3>InsertingOne OrderItem</h3> <hr /> <br /> <form method="post"> <fieldset> <input type="hidden" value="@Model.Order.Id" id="" name="OrderItem.OrderId" /> <div> <label asp-for="OrderItem.BookId"></label> <input asp-for="OrderItem.BookId" /> </div> <div> <label asp-for="OrderItem.Quantity"></label> <input asp-for="OrderItem.Quantity" /> </div> </fieldset> <div> <button type="submit" value="Insert" asp-page-handler="InsertOrderItem">Insert Order Item</button> </div> </form>
- Geef de Id van de Order mee waaraan de Order Items moeten worden toegevoegd:
<input type="hidden" value="@Model.Order.Id" id="" name="OrderItem.OrderId" />
- De handler heet
InsertOrderItem
, die moet de methodeInsertOrderItem
van deOrderModel
klasse oproepen en uitvoeren.
- Geef de Id van de Order mee waaraan de Order Items moeten worden toegevoegd:
- Nu nog de Delete knop voor OrderItem
- Voeg de methode
OnGetDeleteOrderItem
in deReadingOneModel
klasse vanOrder
toe:public ActionResult OnPostDeleteOrderItem(Bll.OrderItem orderItem) { dbContext.OrderItem.Remove(orderItem); dbContext.SaveChanges(); return RedirectToPage("ReadingOne"); }
- Zorg dat de knop binnen het form element staat en voeg een knop in de tabel met OrderItems toe:
<form method="post"> <h2>Order Items</h2> <table class="list"> <thead> <tr> <th> </th> <th> BookId </th> <th> OrderId </th> <th> Quantity </th> </tr> </thead> <tbody> @foreach (var item in Model.OrderItemList) { <tr> <td> <button type="submit" name="OrderItem.Id" value="@item.Id" asp-page-handler="DeleteOrderItem">Delete</button> </td> <td> @item.BookId </td> <td> @item.OrderId </td> <td> @item.Quantity </td> </tr> } </tbody> </table> <h3>InsertingOne OrderItem</h3> <hr /> <br /> <fieldset> <input type="hidden" value="@Model.Order.Id" id="" name="OrderItem.OrderId" /> <div> <label asp-for="OrderItem.BookId"></label> <input asp-for="OrderItem.BookId" /> </div> <div> <label asp-for="OrderItem.Quantity"></label> <input asp-for="OrderItem.Quantity" /> </div> </fieldset> <div> <button type="submit" value="Insert" asp-page-handler="InsertOrderItem">Insert Order Item</button> </div> </form>
- Voeg de methode
2021-01-05 16:56:26