From 7a2f4abde54f5203fcd3b0d8307643f5c1233ee8 Mon Sep 17 00:00:00 2001 From: syneffort Date: Thu, 14 Mar 2024 10:58:53 +0900 Subject: [PATCH] model and validation --- MyFirstBlazor/BlazingPizza/Model/Address.cs | 18 +++++++++ .../BlazingPizza/Pages/Checkout.razor | 38 +++++++++++------- .../BlazingPizza/Shared/AddressEditor.razor | 6 +++ MyFirstBlazor/BlazingPizza/pizza.db-wal | Bin 28872 -> 86552 bytes 4 files changed, 48 insertions(+), 14 deletions(-) diff --git a/MyFirstBlazor/BlazingPizza/Model/Address.cs b/MyFirstBlazor/BlazingPizza/Model/Address.cs index 05819c8..ed26988 100644 --- a/MyFirstBlazor/BlazingPizza/Model/Address.cs +++ b/MyFirstBlazor/BlazingPizza/Model/Address.cs @@ -1,20 +1,38 @@  +using System.ComponentModel.DataAnnotations; + namespace BlazingPizza { public class Address { public int Id { get; set; } + [Required, + MinLength(3, ErrorMessage = "Please use a value bigger than 3 letters."), + MaxLength(100, ErrorMessage = "Please use a value less than 100 letters."),] public string Name { get; set; } + [Required, + MinLength(5, ErrorMessage = "Please use a value bigger than 5 letters."), + MaxLength(100, ErrorMessage = "Please use a value less than 100 letters.")] public string Line1 { get; set; } + [Required, + MaxLength(100, ErrorMessage = "Please use a value less than 100 letters.")] public string Line2 { get; set; } + [Required, + MinLength(3, ErrorMessage = "Please use a value bigger than 3 letters."), + MaxLength(50, ErrorMessage = "Please use a value less than 50 letters.")] public string City { get; set; } + [Required, + MinLength(3, ErrorMessage = "Please use a value bigger than 3 letters."), + MaxLength(20, ErrorMessage = "Please use a value less than 20 letters.")] public string Region { get; set; } + [Required, + RegularExpression(@"^([0-9]{5})$", ErrorMessage = "Please use a valid postal code with five numbers.")] public string PostalCode { get; set; } } } diff --git a/MyFirstBlazor/BlazingPizza/Pages/Checkout.razor b/MyFirstBlazor/BlazingPizza/Pages/Checkout.razor index f9c849a..494a357 100644 --- a/MyFirstBlazor/BlazingPizza/Pages/Checkout.razor +++ b/MyFirstBlazor/BlazingPizza/Pages/Checkout.razor @@ -4,9 +4,10 @@ @inject OrderState OrderState @inject HttpClient HttpClient @inject NavigationManager NavigationManager +@implements IDisposable
- +

Review order

@@ -23,29 +24,28 @@
- +
@code { Order Order => OrderState.Order; - bool isSubmitting; - bool isError = false; + EditContext editContext; + bool isError = true; - async Task CheckSubmission(EditContext editContext) + protected override void OnInitialized() { - isSubmitting = true; - - var model = editContext.Model as Address; - isError = string.IsNullOrWhiteSpace(model?.Name) - || string.IsNullOrWhiteSpace(model?.Line1) - || string.IsNullOrWhiteSpace(model?.PostalCode); - if (!isError) - await PlaceOrder(); + editContext = new EditContext(Order.DeliveryAddress); + editContext.OnFieldChanged += HandleFieldChanged; + } - isSubmitting = false; + void HandleFieldChanged(object sender, FieldChangedEventArgs e) + { + isError = !editContext.Validate(); + StateHasChanged(); } async Task PlaceOrder() @@ -56,4 +56,14 @@ NavigationManager.NavigateTo($"myorders/{newOrderId}"); } + + protected void ShowError() + { + isError = true; + } + + public void Dispose() + { + editContext.OnFieldChanged -= HandleFieldChanged; + } } diff --git a/MyFirstBlazor/BlazingPizza/Shared/AddressEditor.razor b/MyFirstBlazor/BlazingPizza/Shared/AddressEditor.razor index bf2e444..05e7641 100644 --- a/MyFirstBlazor/BlazingPizza/Shared/AddressEditor.razor +++ b/MyFirstBlazor/BlazingPizza/Shared/AddressEditor.razor @@ -2,6 +2,7 @@
+
@@ -9,6 +10,7 @@
+
@@ -16,6 +18,7 @@
+
@@ -23,6 +26,7 @@
+
@@ -30,6 +34,7 @@
+
@@ -37,6 +42,7 @@
+
diff --git a/MyFirstBlazor/BlazingPizza/pizza.db-wal b/MyFirstBlazor/BlazingPizza/pizza.db-wal index 3fa0a25503d7423ba773f22a5e6b275380555ff6..941063cf8ee189a72fd648ac3e0db727a163395c 100644 GIT binary patch delta 1109 zcmb7?Ye*DP6vt=QU7dDrb0ixVk;)bO5ZmhPuDkgFH3|g@A7s{td<<%26fGKk*d%os zSIMYkAVb@g%(U#eC}k3~Scrv~20;WpM2O6RK15&%(!DdXg@Pd5dpL9Ee;(ZPo0z4q z^%)*bxOY$#rNfshEn}8mR5e=7?#Dg%nlqno#xa&#?8xSI++tAtz!e-|8EU63#$qwe zNl)imTFJqVG^|=2X(oq6)W2F>(}b0(BM5@SE}w_j%oH;ByN=&IH&hfo1;wmU9}!0v z)p|T)Jx|(iDy*xnsjD|e;IQVhh>qAsA9UAL)ru$U87zv#H#|I5KbZGN7k5b;-YcI@ zz|(t!Vl|hPz#1rOFKrj>saC;ZwK)=O&J1BshTWCybPDPAbk=N?Z7DHB=9I%Ul;!mD zd0n^WNg*Cwa;vaQ2duh@l!qWZ|y-U2n~A9%T)x$Y%b4?Fc14y@qm$V z+LLWUTB_5ThBk&wT4p|q_l;d8-As^3kck8r?1sdksBqgElZp*8ASPDx^k@}Ihde38 zzR9YyWcdh22}*hh!6@E*7a#%?Qtb*-XluYXlgQhM+yo5-sYqx8FErqUT-c%}m{c39 zlBgn<((Time;e!+W~gkg99e(=B?bih9f_iLpM LYH7V%S|jo=y6S0e delta 9 QcmbQSg!RNj#tkP502j>!)Bpeg