SQL Server'da önceden oluşturulmuş olan bir view'de bir zaman sonra veri getiremediğini ve Conversion Failed When Converting The Nvarchar Value ' ...
.NET Core Areas View içerisinde ViewModel Tanımlama Sorunu Çözümü
ASP .NET Core'da Areas üzerinden çalışma yaparken bazı sorunlar ile karşılaştım. Bu yaşadığım sorunlardan biri ViewModel tanımlama sorunuydu. Şöyleki projemde Areas adında bir klasör oluşturup içerisinde Admin adında bir are oluşturdum. Bu area içerisinde gerekli controller, view, models ve services için gerekli dosyaları hazırladım. Sonrasında da servis ve controller için gerekli kodlamaları yaptım. Sıra view tarafına geldiğinde modelimi sayfanın en üstünde @model UserViewModel şeklinde tanımlamak istediğimde hata ile karşılaştım. Aşağıdaki gibi 4 tane hata aldım. Aslında hepsi de aynı durumdan kaynaklı olarak ortaya çıktı.
Hata Çıktıları
Error CS0246 The type or namespace name 'UserViewModel' could not be found (are you missing a using directive or an assembly reference?) WebApplicationCore
Error CS0246 The type or namespace name 'UserViewModel' could not be found (are you missing a using directive or an assembly reference?) WebApplicationCore
Error CS0411 The type arguments for method 'IModelExpressionProvider.CreateModelExpression(ViewDataDictionary, Expression>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. WebApplicationCore
Error CS0246 The type or namespace name 'UserViewModel' could not be found (are you missing a using directive or an assembly reference?) WebApplicationCore
Bununla ilgili biraz araştırma yaptıktan sonra 2 farklı çözüm buldum. İlk çözüm biraz daha ilkel diyebilirim. 2. çözüm ise sorunu tüm area dizini için çözüyor.
1. Çözüm ViewModel Dizinin Tam Olarak Belirtme
Register.cshtml dosyasında @model UserViewModel yazdığımda sorun alıyordum. Bunun yerine tam dizini belirterek o modeli çağırabilir ve sorunu ortadan kaldırabilirsiniz. Yani @model UserViewModel bunu yerine @model WebApplicationCore.Areas.Admin.Models.UserViewModel gibi tanımlama ile sorun düzelecektir. Tabi sizin proje adınız ve dizininizdeki klasör yapısına uygun olarak değiştirmelisiniz.
2. Çözüm _ViewImports.cshtml Dosyası Ekleme
En iyi çözüm olan _ViewImports.cshtml dosyasını Views dizini içerisine ekleme. Aslında bu dosya proje oluşturduğumuzda views klasörü altında direk olarak gelmekte. Fakat yeni area oluşturduğumuzda bu gelmiyor. Bunu bizim eklememiz gerekiyor. Mevcut ana projedeki Views altından _ViewImports.cshtml dosyasını kopyalayıp Areas/Admin/Views dizini içerisinde yapıştırmamız yeterli.
Bu dosya içerisinde de;
@using WebApplicationCore.Areas.Admin.Models
_ViewImports.cshtml dosyası içerisine tanımlama yapmamız gerekiyor. Böylece bütün viewlerimizde models klasörü altına eklenen tüm viewmodelleri tanıyabilecek ve uzun dizin ismi ile çağırmamıza gerek kalmayacak. Yani direkt olarak @model UserViewModel şeklinde tanımlayabiliriz.
Ek Bilgi
Bu dosya içerisine sadece dizin tanımlaması değil ASP .NET Core'da kullandığımız TagHelper yapısı için de tanımlama yapabiliyoruz. cs.html dosyalarınızda TagHelper kullanmak istiyorsanız;
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Şeklinde _ViewImports.cshtml dosyasına ekleyip kaydetmeniz yeterlidir.
Umarım faydalı olmuştur. İyi çalışmalar.
Yorum yapabilmek için giriş yapmalısınız. Giriş yapmak için tıklayınız.