Latihan - Menyesuaikan proyek
Tim Anda telah membagi pekerjaan untuk aplikasi manajemen inventaris pizza. Rekan satu tim Anda telah membuat aplikasi web ASP.NET Core untuk Anda, dan mereka telah membangun layanan untuk membaca dan menulis data pizza ke database. Anda telah ditetapkan untuk bekerja di halaman Daftar Pizza, yang akan menampilkan daftar pizza dan memungkinkan Anda menambahkan pizza baru ke database. Kita akan mulai dengan mengikuti tur proyek untuk memahami bagaimana proyek diatur.
Catatan
Modul ini menggunakan .NET CLI (Antarmuka Baris Perintah) dan Visual Studio Code untuk pengembangan lokal. Setelah menyelesaikan modul ini, Anda dapat menerapkan konsep menggunakan Visual Studio (Windows) atau melanjutkan pengembangan menggunakan Visual Studio Code (Windows, Linux, dan macOS).
Mendapatkan file proyek
Jika Anda menggunakan GitHub Codespaces, cukup buka repositori di browser, pilih Kode, lalu buat codespace baru di main
cabang.
Jika Anda tidak menggunakan GitHub Codespaces, dapatkan file proyek dan buka di Visual Studio Code dengan langkah-langkah berikut:
Buka shell perintah dan klon proyek dari GitHub menggunakan baris perintah:
git clone https://github.com/MicrosoftDocs/mslearn-create-razor-pages-aspnet-core
Navigasi ke
mslearn-create-razor-pages-aspnet-core
direktori dan buka proyek di Visual Studio Code:cd mslearn-create-razor-pages-aspnet-core code .
Tip
Jika Anda telah menginstal runtime kontainer yang kompatibel, Anda dapat menggunakan ekstensi Dev Containers untuk membuka repositori dalam kontainer dengan alat yang telah diinstal sebelumnya.
Tinjau pekerjaan rekan satu tim Anda
Mari kita luangkan waktu sejenak untuk membiasakan diri dengan kode yang ada di folder ContosoPizza. Proyek ini adalah aplikasi web ASP.NET Core yang dibuat menggunakan dotnet new webapp
perintah . Perubahan yang dilakukan rekan satu tim Anda dijelaskan di bawah ini.
Tip
Jangan menghabiskan terlalu banyak waktu untuk meninjau perubahan ini. Rekan satu tim Anda telah melakukan pekerjaan untuk membuat database dan layanan untuk membaca dan menulis pizza ke database, tetapi mereka tidak membuat perubahan UI apa pun. Anda akan membangun UI yang menggunakan layanan mereka di unit berikutnya.
- Folder Model ditambahkan ke proyek.
- Folder model berisi
Pizza
kelas yang mewakili pizza.
- Folder model berisi
- Folder Data ditambahkan ke proyek.
- Folder data berisi
PizzaContext
kelas yang mewakili konteks database. Ini mewarisi dariDbContext
kelas di Entity Framework Core. Entity Framework Core adalah pemeta relasional objek (ORM) yang memudahkan untuk bekerja dengan database.
- Folder data berisi
- Folder Layanan ditambahkan ke proyek.
- Folder layanan berisi
PizzaService
kelas yang mengekspos metode untuk mencantumkan dan menambahkan pizza. - Kelas menggunakan
PizzaService
PizzaContext
kelas untuk membaca dan menulis pizza ke database. - Kelas terdaftar untuk injeksi dependensi di Program.cs (baris 10).
- Folder layanan berisi
Entity Framework Core juga menghasilkan beberapa hal:
- Folder Migrasi dibuat.
- Folder migrasi berisi kode untuk membuat skema database.
- File database SQLite ContosoPizza.db dihasilkan.
- Jika Anda memiliki ekstensi SQLite yang terinstal (atau Anda menggunakan GitHub Codespaces), Anda bisa menampilkan database dengan mengklik kanan file dan memilih Buka Database. Skema database diperlihatkan di tab SQLite Explorer di panel Explorer.
Meninjau struktur proyek Razor Pages
Segala sesuatu yang lain dalam proyek tidak berubah dari ketika proyek dibuat. Tabel berikut ini menjelaskan struktur proyek yang dihasilkan oleh dotnet new webapp
perintah .
Nama | Deskripsi |
---|---|
Halaman/ | Berisi Halaman Razor dan file pendukung. Setiap halaman Razor memiliki file .cshtml dan file kelas .cshtml.csPageModel . |
wwwroot/ | Berisi file aset statis seperti HTML, JavaScript, dan CSS. |
ContosoPizza.csproj | Berisi metadata konfigurasi proyek, seperti dependensi. |
Program.cs | Berfungsi sebagai titik masuk aplikasi dan mengonfigurasi perilaku aplikasi, seperti perutean. |
Pengamatan penting lainnya:
File halaman Razor dan file kelas yang dipasangkan
PageModel
Halaman razor disimpan di direktori Pages . Seperti disebutkan di atas, setiap halaman Razor memiliki file .cshtml dan file kelas .cshtml.cs
PageModel
. Kelas iniPageModel
memungkinkan pemisahan logika dan presentasi halaman Razor, menentukan penangan halaman untuk permintaan, dan merangkum properti data dan logika yang dilingkup ke halaman Razor-nya.Struktur direktori Pages dan permintaan perutean
Halaman Razor menggunakan struktur direktori Pages sebagai konvensi untuk permintaan perutean. Tabel berikut ini memperlihatkan bagaimana URL memetakan ke nama file:
URL Halaman Peta ke Razor www.domain.com
Halaman/Index.cshtml www.domain.com/Index
Halaman/Index.cshtml www.domain.com/Privacy
Pages/Privacy.cshtml www.domain.com/Error
Pages/Error.cshtml Subfolder di direktori Pages digunakan untuk mengatur halaman Razor. Misalnya, jika ada direktori Halaman/Produk , URL akan mencerminkan struktur tersebut:
URL Halaman Peta ke Razor www.domain.com/Products
Halaman/Produk/Index.cshtml www.domain.com/Products/Index
Halaman/Produk/Index.cshtml www.domain.com/Products/Create
Halaman/Produk/Create.cshtml Tata letak dan file bersama lainnya
Ada beberapa file yang dibagikan di beberapa halaman. File-file ini menentukan elemen tata letak umum dan impor halaman. Tabel berikut ini menjelaskan tujuan setiap file.
File Deskripsi _ViewImports.cshtml Mengimpor namespace layanan dan kelas yang digunakan di beberapa halaman. _ViewStart.cshtml Menentukan tata letak default untuk semua halaman Razor. Pages/Shared/_Layout.cshtml Ini adalah tata letak yang ditentukan oleh _ViewStart.cshtml
file. Menerapkan elemen tata letak umum di beberapa halaman.Pages/Shared/_ValidationScriptsPartial.cshtml Menyediakan fungsionalitas validasi ke semua halaman.
Jalankan proyek untuk pertama kalinya
Mari kita jalankan proyek sehingga kita dapat melihatnya beraksi.
Klik kanan pada folder ContosoPizza di Explorer dan pilih Buka di Terminal Terintegrasi. Ini membuka jendela terminal dalam konteks folder proyek.
Di jendela terminal, masukkan perintah berikut:
dotnet watch
Perintah ini:
- Membangun proyek.
- Memulai aplikasi.
- Mengawasi perubahan file dan menghidupkan ulang aplikasi saat mendeteksi perubahan.
IDE meminta Anda untuk membuka aplikasi di browser. Pilih Buka di Browser.
Tip
Anda juga dapat membuka aplikasi dengan menemukan URL di jendela terminal. Tahan Ctrl dan klik URL untuk membukanya di browser.
Bandingkan beranda yang dirender dengan Pages/Index.cshtml di IDE:
- Amati kombinasi kode HTML, Razor Sintaks, dan C# dalam file.
- Sintaks Razor ditandai oleh
@
karakter. - Kode C# diapit dalam
@{ }
blok. Perhatikan arahan di bagian atas file: - Direktif
@page
menentukan bahwa file ini adalah halaman Razor. - Direktif
@model
menentukan jenis model untuk halaman (dalam hal ini,IndexModel
, yang ditentukan dalam Halaman/Index.cshtml.cs).
- Sintaks Razor ditandai oleh
- Tinjau blok kode C#.
- Kode menetapkan nilai
Title
item dalamViewData
kamus ke "Halaman beranda". ViewData
Kamus digunakan untuk meneruskan data antara halaman Razor danIndexModel
kelas.- Pada runtime,
Title
nilai digunakan untuk mengatur elemen halaman<title>
.
- Kode menetapkan nilai
- Amati kombinasi kode HTML, Razor Sintaks, dan C# dalam file.
Biarkan aplikasi berjalan di jendela terminal. Kita akan menggunakannya di unit yang akan datang. Biarkan tab browser dengan aplikasi Contoso Pizza yang sedang berjalan juga. Anda akan membuat perubahan pada aplikasi dan browser akan secara otomatis me-refresh untuk menampilkan perubahan.
Mengkustomisasi halaman arahan
Mari kita buat beberapa perubahan pada halaman arahan untuk membuatnya lebih relevan dengan aplikasi pizza.
Di Pages/Index.cshtml, ganti kode di blok kode C# dengan kode berikut:
ViewData["Title"] = "The Home for Pizza Lovers"; TimeSpan timeInBusiness = DateTime.Now - new DateTime(2018, 8, 14);
Kode sebelumnya:
- Menetapkan nilai
Title
item dalamViewData
kamus ke "Rumah untuk Pecinta Pizza". - Menghitung jumlah waktu yang telah berlalu sejak bisnis dibuka.
- Menetapkan nilai
Ubah HTML sebagai berikut:
<h1>
Ganti elemen dengan kode berikut:<h1 class="display-4">Welcome to Contoso Pizza</h1>
<p>
Ganti elemen dengan kode berikut:<p class="lead">The best pizza in town for @Convert.ToInt32(timeInBusiness.TotalDays) days!</p>
Kode sebelumnya:
- Mengubah judul menjadi "Selamat Datang di Contoso Pizza".
- Menampilkan jumlah hari yang telah berlalu sejak bisnis dibuka.
- Karakter
@
digunakan untuk beralih dari HTML ke Sintaks Razor. - Metode
Convert.ToInt32
ini digunakan untuk mengonversiTotalDays
propertitimeInBusiness
variabel menjadi bilangan bulat. - Kelas
Convert
adalah bagianSystem
dari namespace layanan, yang diimpor secara otomatis oleh<ImplicitUsings>
elemen dalam file ContosoPizza.csproj .
- Karakter
Simpan file. Tab browser dengan aplikasi secara otomatis di-refresh untuk menampilkan perubahan. Jika Anda menggunakan GitHub Codespaces, file akan disimpan secara otomatis, tetapi Anda harus me-refresh tab browser secara manual.
Penting
Awasi jendela terminal setiap dotnet watch
kali Anda menyimpan file Anda. Terkadang kode Anda mungkin berisi apa yang disebut edit kasar. Ini berarti bahwa kode yang Anda ubah tidak dapat dikompilasi ulang tanpa memulai ulang aplikasi. Jika diminta untuk memulai ulang aplikasi, tekan y
(ya) atau a
(selalu). Anda selalu dapat menghentikan aplikasi dengan menekan Ctrl+C dua kali di jendela terminal, lalu memulai ulang dengan menjalankannya dotnet watch
lagi.
Anda telah membuat perubahan pertama Anda pada halaman Razor! Di unit berikutnya, Anda akan menambahkan halaman baru ke aplikasi untuk menampilkan daftar pizza.