From 95bff65bb0a56bb0a18afd503fee00065eed9b25 Mon Sep 17 00:00:00 2001 From: Vladimir Pecanac Date: Thu, 13 Aug 2026 12:55:15 +0200 Subject: [PATCH] OnChangeEventWithSelectDropdown: retarget net10.0, fix @foreach compile bug, add InputSelect example Bumped WebAssembly packages to 10.0.10, test stack to MSTest 4.3.3 / bunit 1.40.0. @foreach (Razor markup syntax) was used inside two C# method bodies (HandleChange, CalculateGrandTotal) where plain foreach is required - neither method compiled as published. Fixed both. HandleChange rewritten to a TryParse guard + FirstOrDefault lookup instead of a loop-and-compare over an unchecked int.Parse(args.Value.ToString()). Added a fourth topping select using InputSelect inside EditForm with @bind-Value:after, demonstrating the pattern for handling changes on an InputSelect without losing the binding. --- .../OnChangeEventWithSelectDropdown.csproj | 6 +-- .../Pages/Index.razor | 44 ++++++++++++++++--- ...nChangeEventWithSelectDropdownTests.csproj | 12 ++--- 3 files changed, 46 insertions(+), 16 deletions(-) diff --git a/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown.csproj b/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown.csproj index dcbe22f41d..1cb1a110d5 100644 --- a/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown.csproj +++ b/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable @@ -13,8 +13,8 @@ true - - + + diff --git a/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown/Pages/Index.razor b/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown/Pages/Index.razor index 3653580770..41b2ef0286 100644 --- a/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown/Pages/Index.razor +++ b/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdown/Pages/Index.razor @@ -36,16 +36,35 @@ } +
+Fourth topping (InputSelect inside EditForm): + + + @foreach (var topping in toppings) + { + + } + + +

Fourth topping total: $@fourthTotal

@code { public record Topping(int Id, string Name, double Price); + + public class Order + { + public int ToppingId { get; set; } + } + public string? selectedTopping; public string? selectedSecondTopping; public string? selectedThirdTopping; public static double baseBurgerCost = 5.4; public double totalCost = baseBurgerCost; public double grandTotal; + public double fourthTotal; + public Order order = new(); public List toppings = new List() { @@ -59,21 +78,26 @@ public void HandleChange(ChangeEventArgs args) { - @foreach (var topping in toppings) + if (!int.TryParse(args.Value?.ToString(), out var id)) { - if (topping.Id == int.Parse(args.Value.ToString())) - { - selectedSecondTopping = topping.Name; - totalCost = Math.Round(baseBurgerCost + topping.Price, 2); - } + return; } + + var topping = toppings.FirstOrDefault(t => t.Id == id); + if (topping is null) + { + return; + } + + selectedSecondTopping = topping.Name; + totalCost = Math.Round(baseBurgerCost + topping.Price, 2); } public async Task CalculateGrandTotal() { await Task.Delay(2000); - @foreach (var topping in toppings) + foreach (var topping in toppings) { if (topping.Id == int.Parse(selectedThirdTopping)) { @@ -81,4 +105,10 @@ } } } + + public void RecalculateTotal() + { + var topping = toppings.FirstOrDefault(t => t.Id == order.ToppingId); + fourthTotal = topping is null ? 0 : Math.Round(baseBurgerCost + topping.Price, 2); + } } diff --git a/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdownTests/OnChangeEventWithSelectDropdownTests.csproj b/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdownTests/OnChangeEventWithSelectDropdownTests.csproj index af8d508e2b..3f629087b7 100644 --- a/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdownTests/OnChangeEventWithSelectDropdownTests.csproj +++ b/blazor-features/OnChangeEventWithSelectDropdown/OnChangeEventWithSelectDropdownTests/OnChangeEventWithSelectDropdownTests.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable @@ -10,11 +10,11 @@ - - - - - + + + + +