Kayıtlar

Ocak, 2023 tarihine ait yayınlar gösteriliyor

asp.net core basit crud uygulaması - validasyonların view'de görüntülenmesi /// 17

Resim
Oluşturulan validasyonların, View tarafında da kullanılması sağlanacak. Hem TagHelper yardımıyle etiket düzeyinde, hem de jquery validation unobtrustive ile eş zamanı olarak tanımlanacak.  Revize edilecek iki tane View dosyası var.  CreateProduct ve UpdateProduct

asp.net core basit crud uygulaması - validasyon /// 16

Resim
Şimdi yapılacak işlem validasyon ların tanımlanması; Yani kullanıcının input lara yazdığı verilerin uygunluk türüne göre Post edilmesi işlemi. Ürün ismi girilmesi zorunlu kılınacak. Ürün Stoğu ve Ürün Fiyatı seçenekleri zorunlu olmayacak ancak negatif bir sayı türünde olmayacak . Bu validasyonları uygulamak için, FluentValidation kütüphanesi kullanılacak. FluentValidation kütüphanesini projeye yüklemek için; Visual Studio 'daki, Solution Explorer 'da projeye sağ tık yapılır. Manage NuGet Package seçilir. Browse kısmına gidilerek FluentValidation.AspNetCore aratılır ve içine tıklanır. Install edilir. İlk olarak Program.cs içerisine aşağıdaki servisler, Service lerin bulunduğu alana eklenecektir. Ardından ModelState kullanımı gerekmektedir.  Validasyon uygulanacak formlar, ürün oluşturma ve ürün güncelleme sayfaları olduğu için; Bu özellikleri sağlayan Action 'lar ProducController üzerinden aşağıdaki gibi revize edilmelidir. Bir if döngüsü oluşturulur. ModelState.IsValid...

asp.net core basit crud uygulaması - veri detay sayfası - productdetails view /// 15

Resim
Controller 'daki ProductDetails Action 'undan bir View oluşturulsun. Tek bir ürün üzerinden verilerin listelendiği Product/ProductDetails.cshtml sayfası şu şekilde oluşturulacaktır; Bu kod, bir ürün detaylarını görüntülemek için bir görünüm oluşturur.  Model değişkeni, App.Models.Product sınıfından bir nesne içerir.  View içerisinde, " Title " değişkeni " Product Details " olarak ayarlanır ve bir tablo oluşturulur.  Bu tablo, ürün adı, stok miktarı ve fiyatını içerir.  Bu bilgiler, @Model.ProductName , @Model.ProductQuantity ve @Model.ProductPrice ile modelden alınır.

asp.net core basit crud uygulaması - veri güncelleme sayfası - updateproduct view /// 14

Resim
İki tane oluşturulan UpdateProduct Action 'ları üzerinden; Get özellikli Action ile bir View oluşturulsun. Verilerin eklenebildiği Product/UpdateProduct.cshtml sayfası şu şekilde oluşturulacaktır; Bu kod, bir ürün güncelleme işlemi için bir HTML formu oluşturmaktadır. Form, " UpdateProduct " adlı bir Action 'a ve " Product " adlı bir Controller 'a post edilecektir.  TagHelper yardımıyla bağlanmıştır. Formda, ürün adı, stok ve fiyatı için 3 adet input alanı bulunmaktadır.  Bu input alanları, Product modelindeki ProductName , ProductQuantity ve ProductPrice property'lerine bağlıdır. Formun en altında bir " Ürünü Güncelle " düğmesi bulunmaktadır, bu düğme tıklandığında formun içeriği post edilecektir ve güncelleme işlemi gerçekleştirilecektir.

asp.net core basit crud uygulaması - veri ekleme sayfası - createproduct view /// 13

Resim
İki tane oluşturulan CreateProduct Action 'ları üzerinden; Get özellikli Action ile bir View oluşturulsun. Verilerin eklenebildiği Product/CreateProduct.cshtm l sayfası şu şekilde oluşturulacaktır; Model olarak App.Models.Product sınıfı kullanılmaktadır.  Sayfanın başlığı " Create New Product " olarak ayarlanmıştır.  Sayfada bir form bulunmaktadır.  Formun action'ı " CreateProduct " ve controller'ı " Product " olarak TagHelper yardımıyla ayarlanmıştır.  Form içinde 3 adet input alanı bulunmaktadır.  İlk input alanı " ProductName " alanı için kullanılmaktadır.  İkinci input alanı " ProductQuantity " alanı için kullanılmaktadır. Üçüncü input alanı " ProductPrice " alanı için kullanılmaktadır.  Form içinde bir de submit butonu bulunmaktadır.  Bu buton " Ürünü Ekle" yazısı ile etiketlenmiştir.  Bu form kullanıcının yeni bir ürün eklemek için gerekli bilgileri girebileceği bir formdur.

asp.net core basit crud uygulaması - veri silme fonksiyonu - deleteproduct js fonksiyon /// 12

Resim
Veriler listelendiğinde, herhangi bir veriyi silmek için " Delete " tuşu tanımlanmıştı. İşte bu Delete tuşuna basıldığı zaman bir JavaScript fonksiyonu tetiklenecek. Bu  fonksiyon, Index View 'inin en altında @section Scripts özelliği içerisinde tanımlandı. Bunun sebebi, Visual Studio 'da hazır bir MVC projesi oluşturulduğunda bir şablon da beraberinde gelir. Views\Shared\_Layout.cshtml dizininde aşağıdaki kod bulunur.  @await RenderSectionAsync("Scripts", required: false) Bu kodun anlamı, bir View özelinde Scripts section 'u içerisinde o View 'e özel script kodları bulunabilir demektir. Yani sadece Index View' ini ilgilendiren bir JS fonksiyonu bu şekilde tanımlanabilir. Bu kod, bir " Scripts " adlı bölüm içinde tanımlanan bir script bloğudur. Bu fonksiyon, " deleteProduct " adını taşır ve bir parametre olarak " id " alır. İlk olarak, kullanıcıya " Bu ürünü silmek istediğinizden emin misiniz? " diye bir...

asp.net core basit crud uygulaması - veri listeleme sayfası - getproducts view /// 11

Resim
CRUD işlemleri Controller tarafında tanımlandı.  Şimdi sırada View sayfalarının oluşturulması var. Tüm verilerin listelendiği Product/Index.cshtml sayfası şu şekilde oluşturulacaktır; @model IEnumerable<App.Models.Product>; View sayfasının hangi veri modelini kullanacağını tanımlar. Bu kod, " Product " sınıfından oluşan bir IEnumerable kullanacağını belirtir. @{ ViewData["Title"] = "Products"; }; Bu kod bloğu, görünüm sayfasının başlığını tanımlar.  Bu başlık, tarayıcının başlık bölümünde görüntülenir. <table class="table">...</table> Bu kod bloğu, HTML tablo oluşturur.  Tablo, ürünlerin özelliklerini görüntülemek için kullanılır. <thead>...</thead> Bu kod bloğu, tablonun başlık bölümünü oluşturur.  Bu bölüm, tablonun sütunlarının adlarını içerir. <tbody>...</tbody> Bu kod bloğu, tablonun veri bölümünü oluşturur.  Bu bölüm, veritabanından alınan ürünlerin bilgilerini içerir. @foreach (var item in Model) {...

asp.net core basit crud uygulaması - veri detayı - productdetails /// 10

Resim
Veri tabanına ve doğal olarak da ekrana getirilecek verilerde, varolan bir verinin silinmesi için yeni bir Action tanımı yapılacaktır. Delete, Remove veya bu kelimelerin sonuna gelen ek kelimelerle isimlendirilebilir. Bu örnek üzerindeki isimlendirme DeleteProduct şeklinde olacaktır. Sadece bir veri görüntüleme sayfası olacaktır. public async Task<IActionResult> ProductDetails(int id); Bu Action , bir " int " tipinde bir "id" parametresi alır ve " async " anahtar kelimesi ile, asenkron bir işlem gerçekleştireceği belirtilir. Bu Action , veritabanındaki belirli bir ürünün ayrıntılarını göstermek için kullanılır. var product = await _context.Products.FindAsync(id); Veritabanındaki belirli bir ürünü almak için " ProductDbContext " nesnesinin " Products " özelliğini kullanır.  " FindAsync " metodu, veritabanındaki belirli bir ürünü, " id " parametresine göre arar ve bu ürünü, " product " değişkenine asen...

asp.net core basit crud uygulaması - veri silme - deleteproduct /// 9

Resim
Veri tabanına ve doğal olarak da ekrana getirilecek verilerde, varolan bir verinin güncellenmesi için yeni bir Action tanımı yapılacaktır. Delete, Remove veya bu kelimelerin sonuna gelen ek kelimelerle isimlendirilebilir. Bu örnek üzerindeki isimlendirme DeleteProduct şeklinde olacaktır. Herhangi bir View sayfası oluşturmaya gerek yoktur. Ancak bir pop-up şeklinde kontrol mekanizması kurulacaktır.  Bu ileride gösterilecektir. Sadece işleme yönelik bir Action yeterli olacaktır. public async Task<IActionResult> DeleteProduct(int id); Bir " int " tipinde bir " id " parametresi alır ve " async " anahtar kelimesi ile, asenkron bir işlem gerçekleştireceği belirtilir. Bu Action , veritabanından belirli bir ürünü silmek için kullanılır. var product = _context.Products.Find(id); Veritabanındaki belirli bir ürünü almak için " ProductDbContext " nesnesinin " Products " özelliğini kullanır. " Find " metodu, veritabanındaki belirli ...

asp.net core basit crud uygulaması - veri güncelleme - updateproduct /// 8

Resim
Veri tabanına ve doğal olarak da ekrana getirilecek verilerde, varolan bir verinin güncellenmesi için yeni bir Action tanımı yapılacaktır. Update, Edit veya bu kelimelerin sonuna gelen ek kelimelerle isimlendirilebilir. Bu örnek üzerindeki isimlendirme UpdateProduct şeklinde olacaktır. UpdateProduct Action 'undan iki tane oluşturulacaktır.  Bir tanesi ilgili View sayfasını oluşturmayı sağlayan Action . Diğeri de ilgili View sayfasındaki formun veri tabanına istek göndermesini sağlayan Action . Bu iki Action 'u ayırmak için HttpGet ve HttpPost Attribute' ları kullanılacaktır. HttpGet Attribute default olduğu için, Post yapacak Action 'a HttpPost Attribute eklenmesi yeterli olacaktır. İlk olarak, " UpdateProduct " işlevi çağrıldığında, veritabanındaki belirli bir ürünün id'sine göre aranır ve eşleşen ürün " product " değişkenine atanır. Daha sonra, View'de gösterilir.  Kullanıcı tarafından güncellenen verileri gönderildiğinde, HTTP POST ist...

asp.net core basit crud uygulaması - veri ekleme - createproduct /// 7

Resim
Veri tabanına ve doğal olarak da ekrana getirilecek verilere yeni bir ekleme yapmak için yeni bir Action tanımı yapılacaktır. Create,Add,Insert veya bu kelimelerin sonuna gelen ek kelimelerle isimlendirilebilir. Bu örnek üzerindeki isimlemdirme CreateProduct şeklinde olacaktır. CreateProduct Action 'undan iki tane oluşturulacaktır.  Bir tanesi ilgili View sayfasını oluşturmayı sağlayan Action . Diğeri de ilgili View sayfasındaki formun veri tabanına istek göndermesini sağlayan Action . Bu iki Action 'u ayırmak için HttpGet ve HttpPost Attribute'ları kullanılacaktır. HttpGet Attribute default olduğu için, Post yapacak Action 'a HttpPost Attribute eklenmesi yeterli olacaktır. İlk olarak Get yapacak Action tanımlanacak. public IActionResult CreateProduct(); CreateProduct adında bir Action oluşturur.  Default olarak HttpGet Attribute alır. Bu Action View sayfasını oluşturmak için tanımlanır. Dışa bir bağımlılığı olmadığı için Asenkron şekilde programlanmamıştır. Ardından...

asp.net core basit crud uygulaması - verilerin ekrana getirilmesi - getproducts /// 6

Resim
İlk olarak veri tabanındaki verilerin, sayfaya bir tablo şeklinde getirildiği Action oluşturulacak. Bu oluşturulan Action , ProductController içerisine yazılacaktır. İsimlendirmesi GetProducts veya Index olabilir.  Bu örnekte Index ismi verilmiştir. Yani Product/Index yönlendirmesi yapıldığında bu sayfa ekrana gelecektir. Index Action 'u oluşturulurken Asenkron şekilde oluşturulacaktır.  Bunun sebebi ise;  Eğer bir metotta dışa bağımlılık varsa asenkron şekilde oluşturulması daha faydalı olur.  HTTP Request ler ve Veri Tabanı Operasyonları bir dışa bağımlılık örneği olduğu için asenkron şekilde oluşturulabilir. Asenkron programlama saniyede cevaplanan Request sayısın arrtırmayı sağlar. async ; içerisinde asenkron işlem yapılacak metodu belirtir. İçerisinde asenkron işlem yapılacak metot  async keywordü ile işaretlenmelidir. asnyc ile işaretlenmiş bir metodda asenkron çalışacak komutlar await ile işaretlenir. async ile işaretlenmiş metodun geri dönüş tipi; vo...

asp.net core basit crud uygulaması - productcontroller ve productcontroller constructor /// 5

Resim
CRUD işlemleri en basit düzeyde Controller içerisinde tanımlanacak. Bu sebeple Product sınıfı için bir Controller oluşturulacak. ( ProductController.cs ) ProductController içerisine ilk olarak bir Constructor oluşturulması gerekmektedir. Constructor çağrıldığında , " ProductDbContext " tipinde bir nesne alır ve bu nesnenin değeri sınıfın içinde " ProductDbContext " tipinde _context değişkenine atanır.  Bu değişken sadece okunabilir olduğu için  daha sonra bu değişkenin değeri değiştirilemez. private readonly ProductDbContext _context; Sınıf içinde " ProductDbContext " tipinde bir değişken tanımlar ve bu değişken sadece okunabilir olacaktır. public ProductController(ProductDbContext context); ProductController sınıfının Constructor tanımıdır. Constructor , bir " ProductDbContext " nesnesi alır ve bu nesne sınıf içinde " ProductDbContext " tipinde bir değişkene atanır. Constructor içerisindeki  _context = context; Constructor tarafından ...

asp.net core basit crud uygulaması - migration /// 4

Code First yaklaşımında, önce kod kısmında veri tabanını modelleyecek çalışmalar yapılır.  Ardından da veri tabanına migrate işlemi yapılır. Migration ve Migrate farklı kavramlardır. Migration ; kod kısmında modellenen veri tabanını, veri tabanı sunucusunun anlayacağı hale getirir. Migration yapılandırması oluşturulduktan sonra, veri tabanına gönderilmesi işlemine de Migrate denir. Migration oluşturmak için Entity/Model ve Veri Tabanı/DbContext/Context sınıfları gerekmektedir.  Bu iki sınıf oluşturulduktan ve gerekli konfigürasyonlar ile servis eklemeleri tamamlandıktan sonra Migration yapılandırması oluşturulur. Migration yapılandırması oluşturmak için;  Visual Studio üzerindeki " Package Manager Console " kullanılır.  add-migration [description] komutu ile Migration işlemi yapılabilir. [description] kısmı açıklama için revize edilebilir. add-migration first mig Eğer işlem başarıyla tanımlanmışsa, projede bir Migration klasörü otomatik olarak oluşmuş olur ve iç...

asp.net core basit crud uygulaması - veri tabanı sınıfını oluşturmak /// 3

Resim
Veri tabanı ile etkileşim kurabilmek için projede bir veri tabanı sınıfı olması gerekmektedir. Bu sınıfa; Context sınıfı veya DbContext sınıfı da denilebilir. Bir veri tabanı sınıfı en basit MVC uygulamasında; Models klasörü içerisinde veya Models klasörü içerisindeki Context klasörü içerisinde bulunabilir. İsimlendirme olarak da veritabanının ismini alması gerekmektedir.  Mesela içerisinde bir sürü Model/Entity bulunan bir E Ticaret uygulaması için uygun isimlendirme; " ECommerceDbContext " olurken, bu proje özelinde sadece tek bir Entity üzerind iş yapıldığında; " ProductDbContext " isimlendirmesi kullanılabilir.  Bir sınıfın veri tabanı sınıfına karşılık gelebilmesi için DbContext sınıfından kalıtım alması gerekmektedir. DbContext sınıfı EntityFrameworkCore ile gelir. DbContext 'den kalıtım alarak oluşan sınıf aslında veri tabanına karşılık gelmektedir. Models  /  Context  /  ProductDbContext.cs Sınıfın içerisine ilk olarak; ProductDbContext isimli bir ...

asp.net core basit crud uygulaması - model oluşturmak /// 2

Resim
Projedeki veri tabanının ismini ve sütunlarını belirlemek için, kod tarafında bir  Model  oluşturulması gerekmektedir. Model 'in içerisinde veri tabanında yer alacak sütunlar  Property  olarak yazılacak. Basit seviye  MVC  projelerde  Model ler, ana dizinde bulunan  Models  klasörü içerisine oluşturulur. Bir  Model ,  Class  özelliği taşımalıdır. Bir  Model , isimlendirmesini tablo isminin  tekil  haliyle almalıdır. ( Products -> Product  ) Bu örnek üzerinde, ürünler baz alındığı için " Product " tercihi yapılabilir. Veri tabanında olması gereken sütunlar da şu şekildedir; Ürün ID numarası ->  ProductID Ürün İsmi ->  ProductName Ürün Stok Sayısı ->  ProductQuantity Ürün Fiyatı ->  ProductPrice Models/Product.cs