Gyakorlat – Új pizza űrlap hozzáadása
- 10 perc
Ebben a szakaszban befejezi a Pizzalista oldalt azzal, hogy hozzáad egy űrlapot, amely lehetővé teszi új pizzák létrehozását. Oldalkezelőket is hozzáad a pizzák űrlapbeküldésének és törlésének kezeléséhez.
Adjunk hozzá egy űrlapot új pizzák létrehozásához
Kezdjük azzal, hogy tulajdonságokat ad hozzá az PizzaListModel osztályhoz, hogy a felhasználó bemenetét képviselje. A megfelelő oldalkezelőt is hozzá fogja adni.
Nyissa meg a Pages\PizzaList.cshtml.cs fájlt, és adja hozzá a következő tulajdonságot az
PizzaListModelosztályhoz:[BindProperty] public Pizza NewPizza { get; set; } = default!;Az előző kódban:
- A rendszer hozzáad egy elnevezett
NewPizzatulajdonságot azPizzaListModelosztályhoz.-
NewPizzaegyPizzaobjektum.
-
- Az
BindPropertyattribútum a tulajdonságraNewPizzalesz alkalmazva.- A
BindPropertyattribútum aNewPizzatulajdonság Razor-laphoz kötésére szolgál. HTTP POST kérés esetén aNewPizzatulajdonság a felhasználó bemenetével lesz feltöltve.
- A
- A
NewPizzatulajdonság inicializálása a következőre történikdefault!: .- A
default!kulcsszó aNewPizzatulajdonság inicializálásáranullértékre szolgál. Ez megakadályozza, hogy a fordító figyelmeztetést generáljon aNewPizzanem inicializált tulajdonságról.
- A
- A rendszer hozzáad egy elnevezett
Most adja hozzá a HTTP POST oldalkezelőt. Ugyanabban a fájlban adja hozzá a következő metódust az
PizzaListModelosztályhoz:public IActionResult OnPost() { if (!ModelState.IsValid || NewPizza == null) { return Page(); } _service.AddPizza(NewPizza); return RedirectToAction("Get"); }Az előző kódban:
- A
ModelState.IsValidtulajdonság annak megállapítására szolgál, hogy a felhasználó bemenete érvényes-e.- Az érvényesítési szabályokat a
Requiredosztályban található attribútumokból következtetik, példáulRangeésPizzaa osztályban. - Ha a felhasználó bemenete érvénytelen, a rendszer meghívja a
Pagemetódust a lap újbóli megjelenítésére.
- Az érvényesítési szabályokat a
- A
NewPizzatulajdonság egy új pizza hozzáadására szolgál az_serviceobjektumhoz. - Ezzel
RedirectToActiona módszerrel átirányíthatja a felhasználót azGetoldalkezelőbe, amely újra rendereli az oldalt a frissített pizzalistával.
- A
Mentse a fájlt. Ha GitHub Codespaces-t használ, a fájl automatikusan ment.
Térjen vissza a futó
dotnet watchterminálhoz, és nyomja le a Ctrl+R billentyűkombinációt az alkalmazás újratöltéséhez.
Most, hogy van egy lapkezelő, amely kezeli az űrlap beküldését, adja hozzá az űrlapot a Razor-oldalhoz.
Nyissa meg a Pages\PizzaList.cshtml fájlt, és cserélje le a
<!-- New Pizza form will go here -->következő kódra:<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>Az előző kódban:
- Az
asp-validation-summaryattribútum a teljes modell érvényesítési hibáinak megjelenítésére szolgál. - Minden űrlapmező (
<input>és<select>elem), valamint mindegyik<label>az attribútumNewPizzahasználatával van kötve a megfelelőasp-fortulajdonsághoz. - Az
asp-validation-forattribútum az egyes űrlapmezők érvényesítési hibáinak megjelenítésére szolgál. - A
@Html.DisplayNameFormetódus aIsGlutenFreetulajdonság megjelenítendő nevének megjelenítésére szolgál. Ez egy Razor-segédmetódus, amelyet egy tulajdonság nevének megjelenítésére használnak. Ha így végzi a címkét, akkor a jelölőnégyzet be van jelölve, amikor a felhasználó a címkére kattint. - A rendszer hozzáad egy küldés gombot
Createaz űrlaphoz, hogy közzétehesse az űrlapadatokat a kiszolgálón. Futásidőben, amikor a felhasználó ezt a Létrehozás gombot választja, a böngésző HTTP POST-kérésként küldi el az űrlapot a kiszolgálónak.
- Az
A lap alján adja hozzá a következő kódot:
@section Scripts { <partial name="_ValidationScriptsPartial" /> }Ez beszúrja az ügyféloldali érvényesítési szkripteket a lapra. Az ügyféloldali érvényesítési szkriptek a felhasználó bemenetének ellenőrzésére szolgálnak, mielőtt az űrlapot elküldené a kiszolgálónak.
Mentse a fájlt. A böngészőben a Pizzalista oldal frissül az új űrlappal. GitHub Codespaces használata esetén a fájl automatikusan menti a fájlt, de manuálisan kell frissítenie a böngészőlapot.
Írjon be egy új pizzát, és válassza a Létrehozás gombot. Az oldalnak frissítenie kell, és meg kell jelenítenie az új pizzát a listában.
Oldalkezelő hozzáadása pizzák törléséhez
Van egy utolsó darab, amit hozzá kell adni a Pizzalista oldalhoz: egy lapkezelőt a pizzák törléséhez. A pizzák törlésére vonatkozó gombok már szerepelnek az oldalon, de még nem tesznek semmit.
A Pages\PizzaList.cshtml.cs lapra visszatérve adja hozzá a következő metódust az
PizzaListModelosztályhoz:public IActionResult OnPostDelete(int id) { _service.DeletePizza(id); return RedirectToAction("Get"); }Az előző kódban:
- A
OnPostDeletemetódus akkor lesz meghívva, ha a felhasználó a Törlés gombra kattint egy pizza esetében.- A lap tudja, hogy ezt a módszert kell használnia, mert a
asp-page-handlerPages\PizzaList.cshtmlDelete gombjának attribútuma a következőreDeletevan állítva: .
- A lap tudja, hogy ezt a módszert kell használnia, mert a
- A
idparaméter a törölni kívánt pizza azonosítására szolgál.- A
idparaméter azidURL-cím útvonalértékéhez van kötve. Ez aasp-route-idPages\PizzaList.cshtmlTörlés gombjának attribútumával történik.
- A
- A
DeletePizzametódus meghívja az_serviceobjektumot, hogy törölje a pizzát. - Ezzel
RedirectToActiona módszerrel átirányíthatja a felhasználót azGetoldalkezelőbe, amely újra rendereli az oldalt a frissített pizzalistával.
- A
Mentse a fájlt. Ha GitHub Codespaces-t használ, a fájl automatikusan ment.
Tesztelje a Delete gombot egy pizzához. A lapnak frissülnie kell, és a kiválasztott pizzát el kell távolítani a listáról.
Gratulálok! Sikeresen létrehozott egy Razor-oldalt, amely megjeleníti a pizzák listáját, lehetővé teszi, hogy a felhasználó új pizzákat vegyen fel, és lehetővé teszi a felhasználó számára a pizzák törlését is.