Övning – Anpassa projektet
Ditt team har delat upp arbetet för pizzainventeringshanteringsappen. Dina teammedlemmar har skapat ASP.NET Core-webbappen åt dig, och de har redan skapat en tjänst för att läsa och skriva pizzadata till en databas. Du har tilldelats att arbeta på sidan Pizzalista, som visar en lista över pizzor och gör att du kan lägga till nya pizzor i databasen. Vi börjar med att ta en rundtur i projektet för att förstå hur det organiseras.
Kommentar
Den här modulen använder .NET CLI (Kommandoradsgränssnitt) och Visual Studio Code för lokal utveckling. När du har slutfört den här modulen kan du använda begreppen med Hjälp av Visual Studio (Windows) eller fortsatt utveckling med hjälp av Visual Studio Code (Windows, Linux och macOS).
Hämta projektfilerna
Om du använder GitHub Codespaces öppnar du bara lagringsplatsen i webbläsaren, väljer Kod och skapar sedan ett nytt kodområde på grenen main .
Om du inte använder GitHub Codespaces hämtar du projektfilerna och öppnar dem i Visual Studio Code med följande steg:
Öppna ett kommandogränssnitt och klona projektet från GitHub med hjälp av kommandoraden:
git clone https://github.com/MicrosoftDocs/mslearn-create-razor-pages-aspnet-coreGå till
mslearn-create-razor-pages-aspnet-corekatalogen och öppna projektet i Visual Studio Code:cd mslearn-create-razor-pages-aspnet-core code .
Dricks
Om du har en kompatibel containerkörning installerad kan du använda Dev Containers-tillägget för att öppna lagringsplatsen i en container med verktygen förinstallerade.
Granska dina medarbetares arbete
Låt oss ta en stund att bekanta oss med den befintliga koden i mappen ContosoPizza. Projektet är en ASP.NET Core-webbapp som skapats med kommandot dotnet new webapp . De ändringar som dina teammedlemmar har gjort beskrivs nedan.
Dricks
Ägna inte för mycket tid åt att granska dessa ändringar. Dina teammedlemmar har redan gjort arbetet med att skapa databasen och tjänsten för att läsa och skriva pizzor till databasen, men de har inte gjort några ändringar i användargränssnittet. Du kommer att skapa ett användargränssnitt som använder deras tjänst i nästa lektion.
- En modellmapp har lagts till i projektet.
- Modellmappen innehåller en
Pizzaklass som representerar en pizza.
- Modellmappen innehåller en
- En datamapp har lagts till i projektet.
- Datamappen innehåller en
PizzaContextklass som representerar databaskontexten. Den ärver frånDbContextklassen i Entity Framework Core. Entity Framework Core är en objektrelationsmappare (ORM) som gör det enklare att arbeta med databaser.
- Datamappen innehåller en
- En tjänstmapp har lagts till i projektet.
- Mappen Services innehåller en
PizzaServiceklass som visar metoder för att lista och lägga till pizzor. - Klassen
PizzaServiceanvänderPizzaContextklassen för att läsa och skriva pizzor till databasen. - Klassen är registrerad för beroendeinmatning i Program.cs (rad 10).
- Mappen Services innehåller en
Entity Framework Core genererade också några saker:
- En migreringsmapp genererades.
- Migreringsmappen innehåller kod för att skapa databasschemat.
- SQLite-databasfilen ContosoPizza.db genererades.
- Om du har SQLite-tillägget installerat (eller om du använder GitHub Codespaces) kan du visa databasen genom att högerklicka på filen och välja Öppna databas. Databasschemat visas på fliken SQLite Explorer i explorer-fönstret.
Granska projektstrukturen för Razor Pages
Allt annat i projektet är oförändrat från när projektet skapades. I följande tabell beskrivs projektstrukturen som genererades av dotnet new webapp kommandot.
| Namn | beskrivning |
|---|---|
| Sidor/ | Innehåller Razor Pages och stödfiler. Varje Razor-sida har en .cshtml-fil och en .cshtml.csPageModel klassfil. |
| wwwroot/ | Innehåller statiska tillgångsfiler som HTML, JavaScript och CSS. |
| ContosoPizza.csproj | Innehåller metadata för projektkonfiguration, till exempel beroenden. |
| Program.cs | Fungerar som appens startpunkt och konfigurerar appbeteende, till exempel routning. |
Andra anmärkningsvärda observationer:
Razor-sidfiler och deras kopplade
PageModelklassfilRazor-sidor lagras i katalogen Pages . Som nämnts ovan har varje Razor-sida en .cshtml-fil och en .cshtml.cs
PageModelklassfil. KlassenPageModeltillåter separation av en Razor-sidas logik och presentation, definierar sidhanterare för begäranden och kapslar in dataegenskaper och logik som är begränsad till dess Razor-sida.Sidkatalogens struktur och routningsbegäranden
Razor Pages använder katalogstrukturen Pages som konvention för routningsbegäranden. I följande tabell visas hur URL:er mappas till filnamn:
webbadress Mappa till Razor-sida www.domain.comSidor/Index.cshtml www.domain.com/IndexSidor/Index.cshtml www.domain.com/PrivacySidor/Privacy.cshtml www.domain.com/ErrorSidor/Error.cshtml Undermappar i katalogen Pages används för att organisera Razor-sidor. Om det till exempel fanns en pages/products-katalog skulle URL:erna återspegla den strukturen:
webbadress Mappa till Razor-sida www.domain.com/ProductsSidor/produkter/Index.cshtml www.domain.com/Products/IndexSidor/produkter/Index.cshtml www.domain.com/Products/CreateSidor/produkter/Create.cshtml Layout och andra delade filer
Det finns flera filer som delas på flera sidor. De här filerna bestämmer vanliga layoutelement och sidimporter. I följande tabell beskrivs syftet med varje fil.
Fil beskrivning _ViewImports.cshtml Importerar namnrymder och klasser som används på flera sidor. _ViewStart.cshtml Anger standardlayouten för alla Razor-sidor. Sidor/delad/_Layout.cshtml Det här är den layout som anges av _ViewStart.cshtmlfilen. Implementerar vanliga layoutelement på flera sidor.Sidor/delad/_ValidationScriptsPartial.cshtml Ger valideringsfunktioner till alla sidor.
Kör projektet för första gången
Nu ska vi köra projektet så att vi kan se det i praktiken.
Högerklicka på mappen ContosoPizza i Utforskaren och välj Öppna i integrerad terminal. Då öppnas ett terminalfönster i projektmappens kontext.
I terminalfönstret anger du följande kommando:
dotnet watchDet här kommandot:
- Skapar projektet.
- Startar appen.
- Söker efter filändringar och startar om appen när den identifierar en ändring.
IDE uppmanar dig att öppna appen i en webbläsare. Klicka på Öppna i webbläsare.
Dricks
Du kan också öppna appen genom att hitta URL:en i terminalfönstret. Håll ned Ctrl och klicka på URL:en för att öppna den i en webbläsare.
Jämför den renderade startsidan med Pages/Index.cshtml i IDE:
- Observera kombinationen av HTML-, Razor-syntax och C#-kod i filen.
- Razor-syntaxen betecknas med
@tecken. - C#-kod omges av
@{ }block. Anteckna direktiven överst i filen: - Direktivet
@pageanger att den här filen är en Razor-sida. - Direktivet
@modelanger modelltypen för sidan (i det här falletIndexModel, som definieras i Sidor/Index.cshtml.cs).
- Razor-syntaxen betecknas med
- Granska C#-kodblocket.
- Koden anger värdet för objektet i
TitleViewDataordlistan till "Startsida". - Ordlistan
ViewDataanvänds för att skicka data mellan Razor-sidan ochIndexModelklassen. - Vid körning
Titleanvänds värdet för att ange sidans<title>element.
- Koden anger värdet för objektet i
- Observera kombinationen av HTML-, Razor-syntax och C#-kod i filen.
Låt appen vara igång i terminalfönstret. Vi använder den i de kommande lektionerna. Lämna webbläsarfliken med contoso Pizza-appen som körs också. Du kommer att göra ändringar i appen och webbläsaren uppdateras automatiskt för att visa ändringarna.
Anpassa landningssidan
Låt oss göra några ändringar på landningssidan för att göra den mer relevant för pizzaappen.
I Pages/Index.cshtml ersätter du koden i C#-kodblocket med följande kod:
ViewData["Title"] = "The Home for Pizza Lovers"; TimeSpan timeInBusiness = DateTime.Now - new DateTime(2018, 8, 14);Koden ovan:
- Anger värdet
Titleför objektet iViewDataordlistan till "The Home for Pizza Lovers". - Beräknar hur lång tid som har gått sedan verksamheten öppnades.
- Anger värdet
Ändra HTML enligt följande:
Ersätt elementet
<h1>med följande kod:<h1 class="display-4">Welcome to Contoso Pizza</h1>Ersätt elementet
<p>med följande kod:<p class="lead">The best pizza in town for @Convert.ToInt32(timeInBusiness.TotalDays) days!</p>
Koden ovan:
- Ändrar rubriken till "Välkommen till Contoso Pizza".
- Visar antalet dagar som har passerat sedan verksamheten öppnades.
- Tecknet
@används för att växla från HTML till Razor-syntax. - Metoden
Convert.ToInt32används för att konverteraTotalDaysegenskapen för variabelntimeInBusinesstill ett heltal. - Klassen
Convertär en del avSystemnamnområdet, som importeras automatiskt av elementet<ImplicitUsings>i filen ContosoPizza.csproj .
- Tecknet
Spara filen. Webbläsarfliken med appen uppdateras automatiskt för att visa ändringarna. Om du använder GitHub Codespaces sparas filen automatiskt, men du måste uppdatera webbläsarfliken manuellt.
Viktigt!
Håll ett öga på terminalfönstret varje dotnet watch gång du sparar filen. Ibland kan koden innehålla vad den kallar en oförskämd redigering. Det innebär att koden du ändrade inte kan kompileras om utan att programmet startas om. Om du uppmanas att starta om appen trycker du på y (ja) eller a (alltid). Du kan alltid stoppa programmet genom att trycka på Ctrl +C två gånger i terminalfönstret och sedan starta om det genom att köra dotnet watch det igen.
Du har gjort dina första ändringar på en Razor-sida! I nästa lektion lägger du till en ny sida i appen för att visa en lista med pizzor.