Ćwiczenie — tworzenie formularza adresu przy użyciu składników platformy Blazor
W tej chwili aplikacja Blazing Pizza używa elementów HTML do przechwytywania danych i przycisków. Platforma Blazor ma ulepszoną obsługę formularzy, które umożliwiają korzystanie z składników, które mogą być powiązane z modelem języka C#.
Zespół chciałby zastąpić bieżące elementy HTML składnikami platformy Blazor. Zespół chce, aby przesyłał zamówienia tylko wtedy, gdy adres i nazwa nie są puste.
W tym ćwiczeniu zastąpisz bieżące pola HTML składnikiem blazor i zmienisz sposób przesyłania zamówień przez klienta. Zobaczysz, jak używać kontrolki EditContext do zapisywania ręcznych walidacji formularza.
Dodawanie składnika Blazor EditForm
W programie Visual Studio Code w Eksploratorze plików rozwiń węzeł Pages, a następnie wybierz pozycję Checkout.razor.
W bloku
<div class="main">
dodaj nowyEditForm
składnik.<div class="main"> <EditForm Model=Order.DeliveryAddress OnSubmit=CheckSubmission>
W obszarze
</button>
elementu zamknij składnik EditForm.</button> </EditForm> </div>
@onclick
Usuń zdarzenie w obiekcie</button>
.<button class="checkout-button btn btn-warning" disabled=@isSubmitting>
@code
W bloku dodaj kod do obsługi przesyłania formularza powyżej istniejącejPlaceOrder
metody.private async Task CheckSubmission() { isSubmitting = true; await PlaceOrder(); isSubmitting = false; }
isSubmitting = true;
Usuń wiersz kodu zPlaceOrder()
metody .
Zastępowanie elementów HTML składnikami platformy Blazor
W Eksploratorze plików rozwiń węzeł Udostępnione, a następnie wybierz pozycję AddressEditor.razor.
Wybierz menu Edytuj, a następnie wybierz pozycję Zamień.
W pierwszym polu wprowadź
<input
w polu zamień wprowadź ciąg<InputText
, a następnie wybierz pozycję Zastąp wszystkie.Wybierz menu Edytuj, a następnie wybierz pozycję Zamień.
W pierwszym polu wprowadź
@bind=
w polu zamień wprowadź ciąg@bind-Value=
, a następnie wybierz pozycję Zastąp wszystkie.@ref="startName"
Usuń kod w polu Nazwa.Usuń cały kod poniżej deklaracji Parametr w
@code
bloku. Blok powinien teraz wyglądać następująco.@code { [Parameter] public Address Address { get; set; } }
FocusAsync
program jest obecnie obsługiwany tylko w przypadku elementów HTML.
Sprawdzanie pustych pól przed przesłaniem formularza
Dodajmy komunikat o błędzie, który aplikacja może wyświetlić klientowi, jeśli nie wprowadzi nazwy ani adresu.
W Eksploratorze plików rozwiń węzeł Pages, a następnie wybierz pozycję Checkout.razor.
Dodaj komunikat o błędzie w elemecie
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>
@code
W bloku dodaj deklarację dla wartości logicznejisError
.bool isError = false;
Popraw metodę
CheckSubmission()
, aby złożyć zamówienie tylko wtedy, gdy pola nazwy i kodu pocztowego zawierają w nich dane.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; }
W programie Visual Studio Code naciśnij F5 lub wybierz pozycję Uruchom rozpocznij>debugowanie.
Spróbuj zamówić pizze bez wprowadzania żadnych informacji. Powinien zostać wyświetlony komunikat o błędzie.
Naciśnij Shift + F5, aby zatrzymać działanie aplikacji.