ASP.NET Core ViewComponent Kullanımı

asp-net-core-viewcomponents
PRO

ASP.NET Core ViewComponent Kullanımı

​ASP.NET Core ile birlikte gelen View Component’ları, WebForms ile kullanılan UserControl veya ​MVC ile kullandığımız Partial View yapılarına benzetebiliriz. Web uygulamalarımızda birden fazla alanda kullanmak istediğimiz View’larımız için ViewComponent’ı tercih edebiliriz.
MVC’nin önceki sürümlerinde birden fazla alanda kullanmak istediğimiz bileşenleri genellikle Partial View olarak tasarlar ve [ChildActionOnly] attribute ile birlikte tek başlarına çağrılmalarını engellerdik. Bu yapı bizim için büyük kolaylık sağlardı. ASP.NET Core ile birlikte [ChildActionOnly] attribute kullanımı kaldırılmış ve yeni ViewComponent yapısı geliştirilmiştir. ViewComponent’lar dışarıdan Http istek ile doğrudan ulaşılamazlar.
“.NET Core” template’leri altında “AspNetCore_ViewComponent” adında bir “ASP.NET Core Web Application” projesi oluşturuyoruz.​

Öncelikle projemiz içerisinde kullanacağımız basit bir model oluşturuyoruz. Proje ana dizini altında bir “Models” klasörü oluşturup içerisine aşağıdaki gibi “Duyuru.cs” class’ını ekliyoruz.

ViewComponent’lar klasik MVC kullanımına benzer biçimde bir View dosyası ve Controller’a benzer bir Class’tan oluşur.
Projemizin ana dizinine ViewComponents adında bir klasör ve içerisine de örnek ViewComponent’ımız olan DuyuruViewComponent.cs’i ekliyoruz.

“DuyuruViewComponent.cs” isimli Class’ımızın ViewComponent olarak kullanılacağını belirtmek için “ViewComponent” Class’ından miras (Inheritance) alıyoruz. Oluşturduğumuz bu ViewComponent’ı varsayılan olarak “Duyuru” etiketiyle çağıracağız. Eğer farklı bir etiket ile çağırmak istiyorsak Class üzerinde yazılı ViewComponent Attribute’unda bulunan Name parametresini kullanabiliriz.
Not: ViewComponent Attribute’u opsiyoneldir, kullanmamanız durumunda bir değişiklik olmayacaktır. Önemli olan Class’ımızın ViewComponent Class’ından miras almasıdır.
1 | [ViewComponent(Name=”Haber”)]

Hazırlayacağımız ViewComponent’ın çağırılabilmesi için “Invoke” adında “IViewComponentResult” tipinde değer döndüren bir metot oluşturuyoruz. Eğer asenkron bir metot yazmak isterseniz “InvokeAsync” metodunu oluşturabilirsiniz. Asenkron yapısı ayrı bir konu olduğundan bu makalede değinilmeyecektir.
Invoke metodu içerisinde bir duyuru listesi oluşturacağız ve bu listeyi normal bir MVC View’ına model gönderir gibi göndereceğiz.

Sıra geldi ViewComponent’ımızın tasarım kısmına. Proje ana dizinimiz altında “~/View/Shared” içerisine “Components” adında bir klasör oluşturuyoruz.  Proje genelinde kullanacağımız tüm ViewComponentler ile ​ilgili View dosyalarımızı burada toplayacağız. DuyuruViewComponent için bir View oluşturacağımızdan bu dizin içerisine Duyuru adında bir klasör açıp içerisine Default.cshtml adında bir View ekliyoruz. Dizin yapımız aşağıdaki gibi olacaktır.

Her şey tamam, ViewComponent’imiz kullanıma hazır! Kullanmak istediğimiz View içerisinde Invoke metodunu çağırmamız yeterli olacaktır.

1 | @await Component.InvokeAsync(“Duyuru”)
Not: Dilerseniz Invoke methoduna parametre de gönderebilirsiniz.

Proje dosyalarını GitHub üzerinden indirebilirsiniz.​
https://github.com/sinanbozkus/AspNetCore_ViewComponent​

 

Arşivler