Gyakorlat – Új Razor-oldal hozzáadása
Az előző leckében beszerezte a Contoso Pizza projekt forráskódját, majd végrehajtott néhány egyszerű módosítást a kezdőlapon. Ebben a leckében egy új Razor-lapot fog hozzáadni a projekthez.
A Pizzalista lap létrehozása
Új Razor-oldal létrehozásához a .NET parancssori felületet kell használnia.
Mivel a parancs letiltja a
dotnet watchterminált, nyisson meg egy másik terminált a jobb gombbal az ExplorerContosoPizza mappájára kattintva, és válassza a Megnyitás az integrált terminálban lehetőséget.Az új terminálablakban adja meg a következő parancsot:
dotnet new page --name PizzaList --namespace ContosoPizza.Pages --output PagesA fenti parancs a következőket hajtja végre:
- Ez a két fájl jön létre a
ContosoPizza.Pagesnévtérben:- PizzaList.cshtml - a Razor oldal
-
PizzaList.cshtml.cs - a kísérő
PageModelosztály
- Mindkét fájlt a projekt Pages alkönyvtárában tárolja.
- Ez a két fájl jön létre a
A Pages/PizzaList.cshtml fájlban adja hozzá a következő kódot a
@{ }kódblokkban:ViewData["Title"] = "Pizza List 🍕";Ezzel beállítja a
<title>lap elemét.A fájl végén adja hozzá a következő kódot:
<h1>Pizza List 🍕</h1> <!-- New Pizza form will go here --> <!-- List of pizzas will go here -->Ez hozzáad egy címsort a laphoz, valamint két HTML-megjegyzés helyőrzőt a később hozzáadandó funkciókhoz.
Mentse a fájlt. Ha GitHub Codespaces-t használ, a fájl automatikusan ment.
Térjen vissza a futó
dotnet watchterminálhoz, és a Ctrl+R billentyűkombinációval töltse be újra az alkalmazást, és észlelje az új fájlokat.
A Pizzalista lap hozzáadása a navigációs menühöz
Ez jó alkalom lenne az oldal tesztelésére, de a lap nem érhető el a böngészőben, mert még nincs csatolva a navigációs menüben. Most összekapcsolja.
Nyissa meg a Pages/Shared/_Layout.cshtml fájlt.
<ul>Az osztályt tartalmazónavbar-navelemben (a 21. sorban kezdődik) jegyezze fel a<li>Kezdőlap és adatvédelem lapra mutató hivatkozásokat tartalmazó elemeket. Adja hozzá a következő kódot a lista végéhez az<li>adatvédelmi hivatkozást tartalmazó elem után:<li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/PizzaList">Pizza List 🍕</a> </li>Ezzel hozzáad egy hivatkozást a PizzaList lapra a navigációs menühöz.
Mentse a fájlt. Az alkalmazással rendelkező böngészőlap automatikusan frissül a módosítások megjelenítéséhez. 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.
A navigációs menüben válassza a Pizzalista 🍕 hivatkozást. Megjelenik a Pizzalista oldal.
A PizzaService osztály regisztrálása a függőséginjektálási tárolóval
A Pizza lista oldal attól függ, hogy az PizzaService objektum lekérje a pizzalistát. Függőséginjektálás használatával adja meg az PizzaService objektumot a lapnak. Először regisztrálja az osztályt PizzaService a tárolóval.
Nyissa meg Program.cs.
A tárolóhoz szolgáltatásokat hozzáadni kívánt szakaszban adja hozzá a következő kódot:
builder.Services.AddScoped<PizzaService>();Ez a kód regisztrálja az osztályt
PizzaServicea függőséginjektálási tárolóval. AAddScopedmetódus azt jelzi, hogy minden HTTP-kéréshez létre kell hozni egy újPizzaServiceobjektumot. Most márPizzaServicebármelyik Razor-oldalra beadható.Mentse a fájlt. Ha GitHub Codespaces-t használ, a fájl automatikusan ment.
Pizzák listájának megjelenítése
Módosítsuk a PageModel Pizzalista lap osztályát, hogy lekérjük a pizzák listáját az PizzaService objektumból, és tároljuk egy tulajdonságban.
Nyissa meg a Pages/PizzaList.cshtml.cs fájlt.
Adja hozzá a következő
usingutasításokat a fájl elejéhez:using ContosoPizza.Models; using ContosoPizza.Services;Ezek az utasítások importálják a
Pizzalapon használni kívánt típusokat ésPizzaServicetípusokat.ContosoPizza.PagesA névtérblokkon belül cserélje le a teljesPizzaListModelosztályt a következő kódra:public class PizzaListModel : PageModel { private readonly PizzaService _service; public IList<Pizza> PizzaList { get;set; } = default!; public PizzaListModel(PizzaService service) { _service = service; } public void OnGet() { PizzaList = _service.GetPizzas(); } }A fenti kód a következőket végzi el:
- Létrejön egy privát írásvédett
PizzaServicenév_service. Ez a változó egyPizzaServiceobjektumra mutató hivatkozást fog tárolni.- A
readonlykulcsszó azt jelzi, hogy a_serviceváltozó értéke nem módosítható a konstruktorban való beállítás után.
- A
- A
PizzaListpizzák listájának tárolására egy tulajdonság van meghatározva.- A
IList<Pizza>típus azt jelzi, hogy aPizzaListtulajdonság egy objektumlistátPizzafog tartalmazni. -
PizzaListinicializálvadefault!van, hogy jelezze a fordítónak, hogy később inicializálva lesz, ezért nincs szükség null biztonsági ellenőrzésekre.
- A
- A konstruktor elfogad egy objektumot
PizzaService.- Az
PizzaServiceobjektumot függőséginjektálás biztosítja.
- Az
- Egy
OnGetmetódust határozunk meg, amely lekéri a pizzák listáját azPizzaServiceobjektumból, és tároljuk aPizzaListtulajdonságban.
Tipp.
Ha segítségre van szüksége a null biztonság megértéséhez, olvassa el a Null biztonság c#-ban című témakört.
- Létrejön egy privát írásvédett
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 a regisztrált szolgáltatással és az új konstruktorralPizzaListModel.
A pizzák listájának megjelenítése
Most, hogy az oldal hozzáfér a pizzák listájához, ezzel a listával jelenítheti meg a pizzákat az oldalon.
Nyissa meg a Pages/PizzaList.cshtml fájlt.
Az
<!-- List of pizzas will go here -->megjegyzést írja felül az alábbi kóddal:<table class="table mt-5"> <thead> <tr> <th scope="col">Name</th> <th scope="col">Price</th> <th scope="col">Size</th> <th scope="col">Gluten Free</th> <th scope="col">Delete</th> </tr> </thead> <tbody> @foreach (var pizza in Model.PizzaList) { <tr> <td>@pizza.Name</td> <td>@($"{pizza.Price:C}")</td> <td>@pizza.Size</td> <td>@(pizza.IsGlutenFree ? "✔️" : string.Empty)</td> <td> <form method="post" asp-page-handler="Delete" asp-route-id="@pizza.Id"> <button class="btn btn-danger">Delete</button> </form> </td> </tr> } </tbody> </table>A fenti kód a következőket végzi el:
- Létrejön egy
<table>elem a pizzák listájának megjelenítéséhez. - Létrejön egy
<thead>elem a táblafejléc tárolásához. - Az
@foreachiteráláson<tbody>belüli állítás a pizzák listájára ás.- A
Modeltulajdonság aPizzaListModelkód mögötti fájlban létrehozott objektumra hivatkozik. - A
PizzaListtulajdonság aPizzaListmögöttes kódfájlban definiált tulajdonságra hivatkozik.
- A
- Az utasítás minden iterációja
@foreachlétrehoz egy<tr>elemet a pizzaadatok tárolásához:- A Razor szintaxis a pizzaadatok elemekben
<td>való megjelenítésére szolgál. Ez a szintaxis a változóban tárolt objektum tulajdonságainakPizzamegjelenítésérepizzaszolgál. -
PriceC# sztring interpolációval van formázva. - A függvény a tulajdonság értékét
IsGlutenFree"✔️" vagy üres cellaként jeleníti meg. - A pizza törléséhez űrlap jön létre.
- Az
asp-page-handlerattribútum azt jelzi, hogy az űrlapot aDeletekód mögötti fájl kezelőjének kell elküldeni. Ezt a kezelőt egy későbbi leckében fogja létrehozni. - Az
asp-route-idattribútum azt jelzi, hogy azIdPizzaobjektum tulajdonságát át kell adni aDeletekezelőnek.
- Az
- A Razor szintaxis a pizzaadatok elemekben
- Létrejön egy
Mentse a fájlt. A böngészőben a Pizzalista oldal frissül a pizzák listájával. 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.
Gratulálunk! Létrehozott egy Razor-oldalt, amely megjeleníti a pizzák listáját. A következő leckében megismerheti a címkesegítőket és az oldalkezelőket.