Alıştırma - Projeyi özelleştirme
Takımınız pizza envanteri yönetim uygulaması için çalışmayı böldü. Ekip arkadaşlarınız sizin için ASP.NET Core web uygulamasını oluşturdular ve pizza verilerini okumak ve veritabanına yazmak için zaten bir hizmet oluşturdular. Pizza listesi sayfasında çalışmak üzere görevlendirildiniz. Bu sayfada pizzaların listesi görüntülenir ve veritabanına yeni pizzalar eklemenize olanak verilir. Projenin nasıl organize olduğunu anlamak için bir tura katılarak başlayacağız.
Not
Bu modülde yerel geliştirme için .NET CLI (Komut Satırı Arabirimi) ve Visual Studio Code kullanılır. Bu modülü tamamladıktan sonra Visual Studio (Windows) kullanarak kavramları veya Visual Studio Code (Windows, Linux ve macOS) kullanarak geliştirmeye devam edebilirsiniz.
Proje dosyalarını alma
GitHub Codespaces kullanıyorsanız depoyu tarayıcıda açın, Kod'u seçin ve dalda main
yeni bir kod alanı oluşturun.
GitHub Codespaces kullanmıyorsanız proje dosyalarını alın ve aşağıdaki adımlarla Visual Studio Code'da açın:
Bir komut kabuğu açın ve komut satırını kullanarak GitHub'dan projeyi kopyalayın:
git clone https://github.com/MicrosoftDocs/mslearn-create-razor-pages-aspnet-core
Dizine
mslearn-create-razor-pages-aspnet-core
gidin ve projeyi Visual Studio Code'da açın:cd mslearn-create-razor-pages-aspnet-core code .
İpucu
Uyumlu bir kapsayıcı çalışma zamanı yüklüyse, depoyu önceden yüklenmiş araçlarla birlikte bir kapsayıcıda açmak için Dev Kapsayıcıları uzantısını kullanabilirsiniz.
Ekip arkadaşlarınızın çalışmalarını gözden geçirin
ContosoPizza klasöründeki mevcut kod hakkında bilgi edinmek için biraz zaman ayıralım. Proje, komutu kullanılarak dotnet new webapp
oluşturulan bir ASP.NET Core web uygulamasıdır. Ekip arkadaşlarınızın yaptığı değişiklikler aşağıda açıklanmıştır.
İpucu
Bu değişiklikleri gözden geçirmek için çok fazla zaman harcamayın. Ekip arkadaşlarınız veritabanını ve pizzaları okumak ve veritabanına yazmak için hizmeti oluşturmak için zaten çalışmalar yaptı, ancak kullanıcı arabiriminde herhangi bir değişiklik yapmadılar. Sonraki ünitede hizmet kullanan bir kullanıcı arabirimi oluşturacaksınız.
- Projeye bir Models klasörü eklendi.
- Model klasörü pizzayı temsil eden bir
Pizza
sınıf içerir.
- Model klasörü pizzayı temsil eden bir
- Projeye bir Veri klasörü eklendi.
- veri klasörü, veritabanı bağlamını temsil eden bir
PizzaContext
sınıf içerir. Entity Framework Core'daki sınıfındanDbContext
devralınır. Entity Framework Core, veritabanlarıyla çalışmayı kolaylaştıran nesne ilişkisel eşleyicidir (ORM).
- veri klasörü, veritabanı bağlamını temsil eden bir
- Projeye bir Hizmetler klasörü eklendi.
- Services klasörü, pizzaları listelemek ve eklemek için yöntemleri kullanıma sunan bir
PizzaService
sınıf içerir. PizzaService
sınıfı, veritabanına pizza okumak ve yazmak için sınıfını kullanırPizzaContext
.- sınıfı, Program.cs 'de bağımlılık ekleme için kaydedilir (10. satır).
- Services klasörü, pizzaları listelemek ve eklemek için yöntemleri kullanıma sunan bir
Entity Framework Core da birkaç şey oluşturdu:
- Migrations klasörü oluşturuldu.
- Migrations klasörü, veritabanı şemasını oluşturmak için kod içerir.
- SQLite veritabanı dosyası ContosoPizza.db oluşturuldu.
- SQLite uzantısı yüklüyse (veya GitHub Codespaces kullanıyorsanız), dosyaya sağ tıklayıp Veritabanını Aç'ı seçerek veritabanını görüntüleyebilirsiniz. Veritabanı şeması, Gezgin bölmesinin SQLite Gezgini sekmesinde gösterilir.
Razor Pages proje yapısını gözden geçirme
Projedeki diğer her şey, projenin oluşturulduğundan değişmemiştir. Aşağıdaki tabloda, komutu tarafından dotnet new webapp
oluşturulan proje yapısı açıklanmaktadır.
Veri Akışı Adı | Açıklama |
---|---|
Sayfa/ | Razor Pages ve destekleyici dosyaları içerir. Her Razor sayfasının bir .cshtml dosyası ve bir .cshtml.cs PageModel sınıf dosyası vardır. |
wwwroot/ | HTML, JavaScript ve CSS gibi statik varlık dosyalarını içerir. |
ContosoPizza.csproj | Bağımlılıklar gibi proje yapılandırma meta verilerini içerir. |
Program.cs | Uygulamanın giriş noktası olarak görev alır ve yönlendirme gibi uygulama davranışını yapılandırılır. |
Diğer dikkat çekici gözlemler:
Razor sayfa dosyaları ve bunların eşleştirilmiş
PageModel
sınıf dosyasıRazor sayfaları Sayfalar dizininde depolanır. Yukarıda belirtildiği gibi, her Razor sayfasının bir .cshtml dosyası ve bir .cshtml.cs
PageModel
sınıf dosyası vardır.PageModel
sınıfı Razor sayfasının mantığının ve sunumunun ayrılmasına izin verir, istekler için sayfa işleyicilerini tanımlar ve razor sayfası kapsamındaki veri özelliklerini ve mantığı kapsüller.Sayfalar dizin yapısı ve yönlendirme istekleri
Razor Pages, yönlendirme istekleri için kural olarak Pages dizin yapısını kullanır. Aşağıdaki tabloda URL'lerin dosya adlarıyla nasıl eş olduğu gösterilmektedir:
URL Razor'a Eşle sayfası www.domain.com
Pages/Index.cshtml www.domain.com/Index
Pages/Index.cshtml www.domain.com/Privacy
Pages/Privacy.cshtml www.domain.com/Error
Pages/Error.cshtml Sayfalar dizinindeki alt klasörler Razor sayfalarını düzenlemek için kullanılır. Örneğin, Pages /Products dizini varsa URL'ler bu yapıyı yansıtır:
URL Razor'a Eşle sayfası www.domain.com/Products
Sayfalar/Ürünler/Index.cshtml www.domain.com/Products/Index
Sayfalar/Ürünler/Index.cshtml www.domain.com/Products/Create
Sayfalar/Ürünler/Create.cshtml Düzen ve diğer paylaşılan dosyalar
Birden çok sayfada paylaşılan birkaç dosya vardır. Bu dosyalar yaygın düzen öğelerini ve sayfa içeri aktarmalarını belirler. Aşağıdaki tabloda her dosyanın amacı açıklanmaktadır.
Dosya Açıklama _ViewImports.cshtml Birden çok sayfada kullanılan ad alanlarını ve sınıfları içeri aktarır. _ViewStart.cshtml Tüm Razor sayfaları için varsayılan düzeni belirtir. Pages/Shared/_Layout.cshtml Bu, dosya tarafından belirtilen düzendir _ViewStart.cshtml
. Birden çok sayfada ortak düzen öğeleri uygular.Pages/Shared/_ValidationScriptsPartial.cshtml Tüm sayfalara doğrulama işlevi sağlar.
Projeyi ilk kez çalıştırma
Projeyi çalıştıralım, böylece projeyi çalışır durumda görebiliriz.
Gezgin'de ContosoPizza klasörüne sağ tıklayın ve Tümleşik Terminalde Aç'ı seçin. Bu işlem, proje klasörü bağlamında bir terminal penceresi açar.
Terminal penceresinde aşağıdaki komutu girin:
dotnet watch
Şu komut:
- Projeyi oluşturur.
- Uygulamayı başlatır.
- Dosya değişikliklerini izler ve bir değişiklik algıladığında uygulamayı yeniden başlatır.
IDE, uygulamayı bir tarayıcıda açmanızı ister. Tarayıcıda Aç’ı seçin.
İpucu
Terminal penceresinde URL'yi bularak da uygulamayı açabilirsiniz. Ctrl tuşunu basılı tutarak URL'ye tıklayarak tarayıcıda açın.
İşlenen giriş sayfasını IDE'de Pages/Index.cshtml ile karşılaştırın:
- Dosyadaki HTML, Razor Söz Dizimi ve C# kodunun birleşimini gözlemleyin.
- Razor Söz Dizimi karakterlerle
@
gösterilir. - C# kodu bloklar içine
@{ }
alınır. Dosyanın en üstündeki yönergeleri not alın: - yönergesi
@page
, bu dosyanın bir Razor sayfası olduğunu belirtir. - yönergesi
@model
, sayfanın model türünü belirtir (bu örnekte,IndexModel
Pages/Index.cshtml.cs içinde tanımlanmıştır).
- Razor Söz Dizimi karakterlerle
- C# kod bloğunu gözden geçirin.
- Kod, sözlük içindeki
Title
ViewData
öğenin değerini "Giriş sayfası" olarak ayarlar. ViewData
Sözlük, Razor sayfası ileIndexModel
sınıfı arasında veri geçirmek için kullanılır.- Çalışma zamanında değeri,
Title
sayfanın<title>
öğesini ayarlamak için kullanılır.
- Kod, sözlük içindeki
- Dosyadaki HTML, Razor Söz Dizimi ve C# kodunun birleşimini gözlemleyin.
Uygulamayı terminal penceresinde çalışır durumda bırakın. Bunu gelecek ünitelerde kullanacağız. Tarayıcı sekmesini çalışan Contoso Pizza uygulamasıyla da bırakın. Uygulamada değişiklik yaparsınız ve tarayıcı değişiklikleri görüntülemek için otomatik olarak yenilenir.
Giriş sayfasını özelleştirme
Pizza uygulamasıyla daha ilgili hale getirmek için giriş sayfasında birkaç değişiklik yapalım.
Pages/Index.cshtml dosyasında, C# kod bloğundaki kodu aşağıdaki kodla değiştirin:
ViewData["Title"] = "The Home for Pizza Lovers"; TimeSpan timeInBusiness = DateTime.Now - new DateTime(2018, 8, 14);
Yukarıdaki kod:
- Sözlük içindeki
Title
ViewData
öğenin değerini "Pizza Severlerin Evi" olarak ayarlar. - İşletmenin açılmasından bu yana geçen süreyi hesaplar.
- Sözlük içindeki
HTML'yi aşağıdaki gibi değiştirin:
<h1>
öğesini aşağıdaki kodla değiştirin:<h1 class="display-4">Welcome to Contoso Pizza</h1>
<p>
öğesini aşağıdaki kodla değiştirin:<p class="lead">The best pizza in town for @Convert.ToInt32(timeInBusiness.TotalDays) days!</p>
Yukarıdaki kod:
- Başlığı "Contoso Pizza'ya Hoş Geldiniz" olarak değiştirir.
- İşletme açıldıktan sonra geçen gün sayısını görüntüler.
- Karakter
@
, HTML'den Razor Söz Dizimine geçmek için kullanılır. Convert.ToInt32
yöntemi, değişkeninTotalDays
timeInBusiness
özelliğini tamsayıya dönüştürmek için kullanılır.- sınıfı, ContosoPizza.csproj dosyasındaki
<ImplicitUsings>
öğesi tarafından otomatik olarak içeri aktarılan ad alanının bir parçasıdırSystem
.Convert
- Karakter
Dosyayı kaydedin. Değişikliklerin görüntülenmesi için uygulamanın yer alan tarayıcı sekmesi otomatik olarak yenilenir. GitHub Codespaces kullanıyorsanız dosya otomatik olarak kaydedilir, ancak tarayıcı sekmesini el ile yenilemeniz gerekir.
Önemli
Dosyanızı her kaydettiğinizde terminal penceresini dotnet watch
yakından izleyin. Bazen kodunuz kaba bir düzenleme olarak adlandıran içeriği içerebilir. Bu, değiştirdiğiniz kodun uygulamayı yeniden başlatmadan yeniden derlenebileceği anlamına gelir. Uygulamayı yeniden başlatmanız istenirse (evet) veya a
(her zaman) tuşlarına basın y
. Terminal penceresinde Ctrl+C tuşlarına iki kez basarak uygulamayı istediğiniz zaman durdurabilir ve sonra yeniden çalıştırarak dotnet watch
uygulamayı yeniden başlatabilirsiniz.
Razor sayfasında ilk değişikliklerinizi yaptınız! Sonraki ünitede, pizza listesini görüntülemek için uygulamaya yeni bir sayfa ekleyeceksiniz.