model and validation

main
syneffort 1 year ago
parent 1b4a14de36
commit 7a2f4abde5
  1. 18
      MyFirstBlazor/BlazingPizza/Model/Address.cs
  2. 38
      MyFirstBlazor/BlazingPizza/Pages/Checkout.razor
  3. 6
      MyFirstBlazor/BlazingPizza/Shared/AddressEditor.razor
  4. BIN
      MyFirstBlazor/BlazingPizza/pizza.db-wal

@ -1,20 +1,38 @@
 
using System.ComponentModel.DataAnnotations;
namespace BlazingPizza namespace BlazingPizza
{ {
public class Address public class Address
{ {
public int Id { get; set; } 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; } 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; } public string Line1 { get; set; }
[Required,
MaxLength(100, ErrorMessage = "Please use a value less than 100 letters.")]
public string Line2 { get; set; } 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; } 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; } 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; } public string PostalCode { get; set; }
} }
} }

@ -4,9 +4,10 @@
@inject OrderState OrderState @inject OrderState OrderState
@inject HttpClient HttpClient @inject HttpClient HttpClient
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@implements IDisposable
<div class="main"> <div class="main">
<EditForm Model="Order.DeliveryAddress" OnSubmit="CheckSubmission"> <EditForm EditContext="editContext" OnValidSubmit="PlaceOrder">
<div class="checkout-cols"> <div class="checkout-cols">
<div class="checkout-order-details"> <div class="checkout-order-details">
<h4>Review order</h4> <h4>Review order</h4>
@ -23,29 +24,28 @@
</div> </div>
</div> </div>
<button class="checkout-button btn btn-warning" disabled="@isSubmitting"> <button class="checkout-button btn btn-warning" type="submit" disabled="@isError">
Place order Place order
</button> </button>
<DataAnnotationsValidator />
</EditForm> </EditForm>
</div> </div>
@code { @code {
Order Order => OrderState.Order; Order Order => OrderState.Order;
bool isSubmitting; EditContext editContext;
bool isError = false; bool isError = true;
async Task CheckSubmission(EditContext editContext) protected override void OnInitialized()
{ {
isSubmitting = true; editContext = new EditContext(Order.DeliveryAddress);
editContext.OnFieldChanged += HandleFieldChanged;
var model = editContext.Model as Address; }
isError = string.IsNullOrWhiteSpace(model?.Name)
|| string.IsNullOrWhiteSpace(model?.Line1)
|| string.IsNullOrWhiteSpace(model?.PostalCode);
if (!isError)
await PlaceOrder();
isSubmitting = false; void HandleFieldChanged(object sender, FieldChangedEventArgs e)
{
isError = !editContext.Validate();
StateHasChanged();
} }
async Task PlaceOrder() async Task PlaceOrder()
@ -56,4 +56,14 @@
NavigationManager.NavigateTo($"myorders/{newOrderId}"); NavigationManager.NavigateTo($"myorders/{newOrderId}");
} }
protected void ShowError()
{
isError = true;
}
public void Dispose()
{
editContext.OnFieldChanged -= HandleFieldChanged;
}
} }

@ -2,6 +2,7 @@
<label>Name:</label> <label>Name:</label>
<div> <div>
<InputText @bind-Value="Address.Name" /> <InputText @bind-Value="Address.Name" />
<ValidationMessage For="@(() => Address.Name)" />
</div> </div>
</div> </div>
@ -9,6 +10,7 @@
<label>Line 1:</label> <label>Line 1:</label>
<div> <div>
<InputText @bind-Value="Address.Line1" /> <InputText @bind-Value="Address.Line1" />
<ValidationMessage For="@(() => Address.Line1)" />
</div> </div>
</div> </div>
@ -16,6 +18,7 @@
<label>Line 2:</label> <label>Line 2:</label>
<div> <div>
<InputText @bind-Value="Address.Line2" /> <InputText @bind-Value="Address.Line2" />
<ValidationMessage For="@(() => Address.Line2)" />
</div> </div>
</div> </div>
@ -23,6 +26,7 @@
<label>City:</label> <label>City:</label>
<div> <div>
<InputText @bind-Value="Address.City" /> <InputText @bind-Value="Address.City" />
<ValidationMessage For="@(() => Address.City)" />
</div> </div>
</div> </div>
@ -30,6 +34,7 @@
<label>Region:</label> <label>Region:</label>
<div> <div>
<InputText @bind-Value="Address.Region" /> <InputText @bind-Value="Address.Region" />
<ValidationMessage For="@(() => Address.Region)" />
</div> </div>
</div> </div>
@ -37,6 +42,7 @@
<label>Postal code:</label> <label>Postal code:</label>
<div> <div>
<InputText @bind-Value="Address.PostalCode" /> <InputText @bind-Value="Address.PostalCode" />
<ValidationMessage For="@(() => Address.PostalCode)" />
</div> </div>
</div> </div>

Loading…
Cancel
Save