Ćwiczenie — dodawanie nowego formularza pizzy
- 10 min
W tej lekcji dokończysz stronę Lista pizzy, dodając formularz do tworzenia nowych pizz. Dodasz również procedury obsługi stron, aby obsługiwać przesyłanie formularzy i usuwanie pizz.
Dodaj formularz, aby utworzyć nowe pizze
Zacznijmy od dodania właściwości do PizzaListModel klasy w celu reprezentowania danych wejściowych użytkownika. Dodasz również odpowiedni obsługiwacz stron.
Otwórz plik Pages\PizzaList.cshtml.cs i dodaj następującą właściwość do
PizzaListModelklasy:[BindProperty] public Pizza NewPizza { get; set; } = default!;W poprzednim kodzie:
- Właściwość o nazwie
NewPizzajest dodawana doPizzaListModelklasy.-
NewPizzajest obiektemPizza.
-
- Atrybut
BindPropertyjest zastosowany do właściwościNewPizza.- Atrybut
BindPropertyjest używany do powiązaniaNewPizzawłaściwości ze stroną Razor. Po wysłaniuNewPizzażądania HTTP POST właściwość zostanie wypełniona danymi wejściowymi użytkownika.
- Atrybut
- Właściwość
NewPizzajest inicjowana nadefault!.- Słowo kluczowe
default!jest używane do zainicjowania właściwościNewPizzananull. Zapobiega to temu, że kompilator wygeneruje ostrzeżenie o niezainicjowanej właściwościNewPizza.
- Słowo kluczowe
- Właściwość o nazwie
Teraz dodaj procedurę obsługi strony dla protokołu HTTP POST. W tym samym pliku dodaj następującą metodę do
PizzaListModelklasy:public IActionResult OnPost() { if (!ModelState.IsValid || NewPizza == null) { return Page(); } _service.AddPizza(NewPizza); return RedirectToAction("Get"); }W poprzednim kodzie:
- Właściwość
ModelState.IsValidsłuży do określania, czy dane wejściowe użytkownika są prawidłowe.- Reguły walidacji są wnioskowane z atrybutów (takich jak
RequirediRange) wPizzaklasie Models\Pizza.cs. - Jeśli dane wejściowe użytkownika są nieprawidłowe,
Pagemetoda jest wywoływana w celu ponownego renderowania strony.
- Reguły walidacji są wnioskowane z atrybutów (takich jak
- Właściwość
NewPizzasłuży do dodawania nowej pizzy do_serviceobiektu. - Metoda
RedirectToActionsłuży do przekierowywania użytkownika doGetprogramu obsługi strony, co spowoduje ponowne renderowanie strony ze zaktualizowaną listą pizzy.
- Właściwość
Zapisz plik. Jeśli używasz usługi GitHub Codespaces, plik jest zapisywany automatycznie.
Wróć do uruchomionego
dotnet watchterminalu i naciśnij Ctrl+R , aby ponownie załadować aplikację.
Teraz, gdy istnieje procedura obsługująca przesyłanie formularza, dodajmy formularz do strony Razor.
Otwórz plik Pages\PizzaList.cshtml i zastąp element
<!-- New Pizza form will go here -->następującym kodem:<form method="post"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="NewPizza.Name" class="control-label"></label> <input asp-for="NewPizza.Name" class="form-control" /> <span asp-validation-for="NewPizza.Name" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="NewPizza.Size" class="control-label"></label> <select asp-for="NewPizza.Size" class="form-control" id="PizzaSize"> <option value="">-- Select Size --</option> <option value="Small">Small</option> <option value="Medium">Medium</option> <option value="Large">Large</option> </select> <span asp-validation-for="NewPizza.Size" class="text-danger"></span> </div> <div class="form-group form-check"> <label class="form-check-label"> <input class="form-check-input" asp-for="NewPizza.IsGlutenFree" /> @Html.DisplayNameFor(model => model.NewPizza.IsGlutenFree) </label> </div> <div class="form-group"> <label asp-for="NewPizza.Price" class="control-label"></label> <input asp-for="NewPizza.Price" class="form-control" /> <span asp-validation-for="NewPizza.Price" class="text-danger"></span> </div> <div class="form-group"> <input type="submit" value="Create" class="btn btn-primary" /> </div> </form>W poprzednim kodzie:
- Atrybut
asp-validation-summarysłuży do wyświetlania błędów walidacji dla całego modelu. - Każde pole formularza (
<input>i<select>elementy) oraz każdy<label>jest powiązany z odpowiednią właściwościąNewPizzaprzy użyciu atrybutuasp-for. - Atrybut
asp-validation-forsłuży do wyświetlania błędów walidacji dla każdego pola formularza. - Metoda
@Html.DisplayNameForsłuży do wyświetlania nazwyIsGlutenFreewłaściwości. Jest to metoda pomocnika Razor używana do wyświetlania nazwy wyświetlanej właściwości. Wykonanie etykiety w ten sposób gwarantuje, że pole wyboru jest zaznaczone, gdy użytkownik kliknie etykietę. - Do formularza dodawany jest przycisk przesyłania oznaczony etykietą
Createw celu wysłania danych formularza na serwer. W czasie wykonywania, gdy użytkownik wybierze ten przycisk Utwórz , przeglądarka wysyła formularz jako żądanie HTTP POST do serwera.
- Atrybut
W dolnej części strony dodaj następujący kod:
@section Scripts { <partial name="_ValidationScriptsPartial" /> }Powoduje to wstrzyknięcie skryptów walidacji po stronie klienta do strony. Skrypty weryfikacji po stronie klienta są używane do sprawdzania poprawności danych wejściowych użytkownika przed przesłaniem formularza na serwer.
Zapisz plik. W przeglądarce strona Lista pizzy zostanie odświeżona przy użyciu nowego formularza. Jeśli używasz usługi GitHub Codespaces, plik jest zapisywany automatycznie, ale musisz ręcznie odświeżyć kartę przeglądarki.
Wprowadź nową pizzę i wybierz przycisk Utwórz . Strona powinna odświeżyć się i wyświetlić nową pizzę na liście.
Dodaj obsługę strony do usunięcia pizz.
Jest jeden ostatni kawałek, który należy dodać do strony Lista pizzy: procedurę obsługi strony w celu usunięcia pizzy. Przyciski usuwania pizzy są już na stronie, ale jeszcze nic nie robią.
Po powrocie do klasy Pages\PizzaList.cshtml.cs dodaj następującą
PizzaListModelmetodę:public IActionResult OnPostDelete(int id) { _service.DeletePizza(id); return RedirectToAction("Get"); }W poprzednim kodzie:
- Metoda
OnPostDeletejest wywoływana, gdy użytkownik kliknie przycisk Usuń dla pizzy.- Strona wie, aby używać tej metody, ponieważ atrybut na przycisku
asp-page-handlerw pliku Pages\PizzaList.cshtml jest ustawiony na .
- Strona wie, aby używać tej metody, ponieważ atrybut na przycisku
- Parametr
idsłuży do identyfikowania pizzy do usunięcia.- Parametr
idjest powiązany z wartościąidtrasy w adresie URL. Jest to realizowane za pomocą atrybutuasp-route-idna przycisku Usuń w pliku Pages\PizzaList.cshtml.
- Parametr
- Metoda
DeletePizzajest wywoływana na obiekcie_servicew celu usunięcia pizzy. - Metoda
RedirectToActionsłuży do przekierowywania użytkownika doGetprogramu obsługi strony, co spowoduje ponowne renderowanie strony ze zaktualizowaną listą pizzy.
- Metoda
Zapisz plik. Jeśli używasz usługi GitHub Codespaces, plik jest zapisywany automatycznie.
Przetestuj przycisk Usuń dla pizzy. Strona powinna zostać odświeżona, a wybrana pizza powinna zostać usunięta z listy.
Gratulacje! Pomyślnie utworzono stronę Razor, która wyświetla listę pizz, umożliwia użytkownikowi dodawanie nowych pizz, a także umożliwia użytkownikowi usunięcie pizzy.