ASP.NET Core 6/Razor Sayfaları/Razor Sayfasının Görünüm Kısmı
Bu bölümde bir Razor sayfasının görünüm kısmını işleyeceğiz. Bir Razor sayfasının görünüm kısmı da esasında bir view'dır ve MVC'deki view'larla hemen hemen aynı özelliklere sahiptir. Sadece daha önce gödüğümüz @page direktifi gibi özel direktifleri ve sadece kendi model sınıfını model olarak belirtebilme gibi kısıtları vardır.
Layout'lar ve partial view'lar Razor sayfalarında da MVC'yle aynı mantıkta çalışır. Tek fark geleneksel olarak Layout ve partial view'ların Views/Shared klasörü yerine Pages/Shared klasöründe tanımlanmasıdır
Esasında layout'lar ve partial view'lar Pages klasöründe ve bu klasörün herhangi bir alt klasöründe tanımlanabilir. Razor Pages'ta view arama süreci önce ilgili klasör, sonra üst klasörler, sonra Shared klasörü, sonra MVC'deki Shared klasörüdür. Örneğin Pages/Deneme klasöründeki bir Razor sayfası bir partial view'ı kullanmak isterse ilgili partial view önce Pages/Deneme klasöründe, sonra Pages klasöründe, sonra Pages/Shared klasöründe, en son Views/Shared klasöründe aranır. Bu da MVC tarafında tanımlanan layout ve partial view'ların Razor Pages tarafında da kullanılabileceği anlamına gelir.
Bir Razor sayfasının bir layout'u kullanması için tıpkı MVC'de olduğu gibi Razor sayfasının görünüm kısmının başında Layout özelliğine değer ataması yeterlidir. Razor sayfalarında da _ViewImports.cshtml ve _ViewStart.cshtml dosyaları tanımlanabilir. Bu iki dosya da Pages klasörüne konulmalıdır ve MVC'dekiyle aynı işleve sahiptir. Bütün Razor sayfalarının aynı layout'u kullanmasını sağlamak için _ViewStart.cshtml dosyasında Layout özelliğine değer ataması yaparız.
Razor sayfasının görünüm kısmına servis enjekte edilmesi
[düzenle]Bir Razor sayfasının görünüm kısmına bir servis enjekte edebiliriz. Bu durumda ilgili servis nesnesi sayfanın görünüm kısmında kullanılabilecektir. Örnek:
@page
@inject DataContext context;
<ul>
@foreach (Category c in context.Categories) {
<li>@c.Name</li>
}
</ul>
Örneğimizde view'a DataContext servisi enjekte edilmekte ve bu servis nesnesi üzerinden Categories özelliğine erişilmektedir.
NOT: Razor sayfalarının kod kısmı olmadan sadece görünüm kısmı olabilir. Bu durumda sadece ilgili view render'lanacaktır. Ancak bu durumda view'a veri gitmeyeceği için view'ın kendi verisini kendisi üretmesi gerekecektir (örneğimizdeki gibi).