Övning – Skapa ett adressformulär med Blazor-komponenter
För närvarande använder Blazing Pizza-appen HTML-element för knappar och för att samla in data. Blazor-ramverket förbättrar stödet för formulär, så att de kan använda komponenter som kan bindas till en C#-modell.
Teamet vill att du ersätter de aktuella HTML-elementen med Blazor-komponenter. Teamet vill att du bara skickar beställningar om adressen och namnet inte är tomma.
I den här övningen ersätter du de aktuella HTML-fälten med en Blazor-komponent och ändrar hur kunder skickar beställningar. Sedan kan du se hur du använder EditContext för att skriva manuella valideringar för ett formulär.
Lägga till en Blazor EditForm-komponent
I Utforskaren i Visual Studio Code expanderar du Sidor, och sedan väljer du Checkout.razor.
Under blocket
<div class="main">lägger du till en nyEditFormkomponent.<div class="main"> <EditForm Model=Order.DeliveryAddress OnSubmit=CheckSubmission>Under elementet
</button>stänger du EditForm-komponenten.</button> </EditForm> </div>@onclickTa bort händelsen på</button>.<button class="checkout-button btn btn-warning" disabled=@isSubmitting>I blocket
@codelägger du till koden för att hantera formuläröverföringen ovanför den befintligaPlaceOrdermetoden.private async Task CheckSubmission() { isSubmitting = true; await PlaceOrder(); isSubmitting = false; }Ta bort kodraden
isSubmitting = true;PlaceOrder()från metoden.
Ersätt HTML-element med Blazor-komponenter
I utforskaren expanderar du Delat och väljer sedan AddressEditor.razor.
Välj menyn Redigera och välj sedan Ersätt.
I fältet Sök anger du
<inputi fältet<InputTextoch väljer sedan Ersätt alla.
Välj menyn Redigera och välj sedan Ersätt.
I fältet
@bind=i fältet Ersätt anger du@bind-Value=och väljer sedan Ersätt alla.@ref="startName"Ta bort koden i fältet Namn.Ta bort all kod under parameterdeklarationen
@codei blocket. Blocket bör nu se ut så här.@code { [Parameter] public Address Address { get; set; } }FocusAsyncstöds för närvarande endast på HTML-element.
Sök efter tomma fält innan du skickar ett formulär
Nu ska vi lägga till ett felmeddelande som appen kan visa en kund om de inte anger sitt namn eller sin adress.
I utforskaren expanderar du Sidor och väljer sedan Checkout.razor.
Lägg till ett felmeddelande under elementet
h4>Deliver to...</h4>.<div class="checkout-delivery-address"> <h4>Deliver to...</h4> @if (isError) { <div class="alert alert-danger">Please enter a name and address.</div> } <AddressEditor Address="Order.DeliveryAddress" /> </div>@codeLägg till en deklaration för detisErrorbooleska i blocket.bool isError = false;CheckSubmission()Förbättra metoden så att den bara placerar en order om namn- och postnummerfälten har data i sig.private async Task CheckSubmission(EditContext editContext) { 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(); } isSubmitting = false; }Tryck på F5 i Visual Studio Code eller välj Kör>starta felsökning.
Försök att beställa några pizzor utan att ange någon information. Du bör se felmeddelandet.
Tryck på Skift + F5 för att stoppa appen från att köras.