ASP.NET Core MVC'de Model Binding Nedir?

ASP.NET Core MVC'de Model Binding Nedir?

ASPNET Core MVC geliştiricileri, kullanıcıların girdiği verileri kontrol etmek için model binding özelliğini kullanırlar Bu özellik, isteklere bağlı olarak modellerin tanımlanması ve ilgili verilerin bu modellerle eşleştirilmesi sürecidir Bu sayede, uygulama kullanıcıların veri taleplerini daha kolay ve etkili bir şekilde yönetebilir POCO, complex ve collection model binding gibi farklı model binding türleri vardır ve uygulamanın ihtiyaçlarına ve veri tipine göre seçilebilir Verilerin hangi kaynaklardan alınacağı da belirtilmelidir Model binding işlemi, uygulamanın istek nesnesini oluşturmasına yardımcı olur POCO Model Binding, en basit model binding türüdür ve istenen alan adları ile sınıfın property'leri eşleştirilir Kullanımı oldukça basittir ve Controller sınıfında kullanılır

ASP.NET Core MVC'de Model Binding Nedir?

ASP.NET Core MVC geliştiricileri, kullanıcıların yaptığı isteklerde yer alan verileri kontrol etmek için model binding özelliğinden yararlanır. Model binding, bir istekte yer alan verileri, ilgili bir modele bağlama işlemidir. Bu işlem, bir isteğin hangi modele bağlanacağını otomatik olarak belirler ve modelin özellikleri arasında eşleştirme yapar. Model binding sayesinde, uygulamanın kullanıcı tarafından gelen veri taleplerini kolayca idare etmesi mümkün hale gelir.

ASP.NET Core MVC'de model binding kullanmak oldukça kolaydır ve birçok farklı model binding türü bulunmaktadır. Bunlar arasında POCO model binding, complex model binding ve collection model binding gibi farklı türler yer almaktadır. Bu türler, uygulamanın ihtiyaçlarına ve veri tipine göre seçilerek kullanılabilir.

POCO model binding, sadece basit nesnelerin model binding işlemi için kullanılan bir türdür. Bu yöntem, uygulamanın kendisinde bulunan basit bir nesne oluşturarak, gelen verileri değişkenlere doğrudan atar. Complex model binding ise, daha karmaşık veri modellerinin model binding işlemini kolaylaştıran bir türdür. Bu yöntemde, veriler birleştirilerek ve karşılaştırılarak modelin özelliklerine atama yapılır. Collection model binding ise, diziler ve benzeri koleksiyonların kolayca yönetilebilmesi için kullanılan bir yöntemdir. Bu türde, koleksiyondaki her bir eleman, modelin kendisine yönlendirilir ve model binding işlemi gerçekleştirilir.

Model binding işlemi için, uygulamanın hangi kaynaklardan veri talep edeceği de belirtilmelidir. Bu kaynaklar, isteklerin geldiği URL’ler ve isteğin kendisinde yer alan verileri içeren body kısmıdır. Uygulama, bu kaynakları kullanarak model binding işlemi gerçekleştirir ve istek nesnesini oluşturur.

ASP.NET Core MVC’de model binding işlemi, oldukça kolay adımlar izleyerek gerçekleştirilir. İlk olarak, bir modele ihtiyaç duyulur ve modelin nitelikleri tanımlanır. Daha sonra, kaynaklar belirlenir ve model binding işlemi yapılması için gereken kodlar yazılır. Birkaç örnek üzerinden model binding işleminin nasıl çalıştığı daha iyi anlaşılabilir.


Model Binding Türleri

ASP.NET Core MVC web uygulamalarında model binding işlemi, veri iletişiminde oldukça önemli bir yer tutar. Bu işlem sayesinde gelen istekler doğrultusunda yönlendirilecek olan Action metodu içerisinde kullanılan parametrelere istenen verilerin aktarımı gerçekleştirilir.

ASP.NET Core MVC'de kullanabileceğimiz farklı model binding türleri bulunur. Bu türler, model sınıfının ve Action metodu parametrelerinin türlerine göre farklılık gösterir. En sık kullanılan model binding türleri şunlardır:

  • POCO Model Binding
  • Complex Model Binding
  • Collection Model Binding

POCO Model Binding, en basitinde, parametre olarak alınan sınıfın property'lerinin, gelen istekteki alan adı ile eşleştirilmesi işlemidir. Kısaca, alan adı ile property adının aynı olması gerekliliği vardır. Örneğin; bir 'Person' sınıfı içerisinde 'Name' ve 'Age' property'leri varsa, bu sınıf için tanımlanan Action metoduna gelen 'Name' ve 'Age' değerleri otomatik olarak bu property'lere bağlanır.

Complex Model Binding, daha karmaşık veri yapılarının model binding işlemini gerçekleştirir. Örneğin; bir sınıf içerisinde başka bir sınıf veya sınıflar da yer alıyorsa, bu veri yapılarının ayrıştırılması ve bind edilmesi Complex Model Binding ile sağlanır.

Collection Model Binding, isminden de anlaşılacağı üzere, parametre olarak alınan sınıfın property'lerinin dizi veya liste gibi veri yapılarından biri olması durumunda kullanılır. Gelen istekler doğrultusunda, koleksiyon türündeki property'ler, istek içerisindeki elamanlar ile eşleştirilerek model binding işlemi gerçekleştirilir.

ASP.NET Core MVC'de model binding işlemi gerçekleştirilirken, verilerin nereden alınacağına ve hangi property'lere bind edileceğine karar verecek olan kaynaklar vardır. Bu kaynaklar, sırasıyla; istek verisi, rotayon belirleyicileri, query string verileri, diğer kaynaklar ve son olarak da default değeri oluşturan 'ModelMetadata' özellikleri şeklinde sıralanır. Bu kaynaklar, bir önceki kaynakta veri bulunamadığı durumlarda bir sonraki kaynağa yönelirler.

Kısacası, ASP.NET Core MVC' de model binding işlemi, gelen isteklerin yönlendirileceği Action metodu parametrelerine veri aktarılmasını sağlayan oldukça önemli bir mekanizmadır. Model binding işlemi için kullanılan kaynaklar ve farklı model binding türleri hakkında bilgi sahibi olmak, bu mekanizmanın daha etkin bir şekilde kullanılmasını sağlar.


POCO Model Binding

POCO (Plain Old CLR Object) Model Binding, ASP.NET Core MVC'deki en basit model binding türüdür ve basit objelerin model binding işlemleri için kullanılır. Her bir alan adı (property) model için bind edilir. Bind edilen alanlar, HTTP isteği ile ilgili parametrelerin karşılık gelen değerlerinden alınır.

POCO Model Binding'in kullanımı oldukça basittir. İlk olarak, bind edilecek sınıf oluşturulur ve istenen alan adları tanımlanır. Ardından, Controller sınıfında bu modelin kullanımı açıklanır. Ayrıca, HTTP istekleri ve modelin kayıt edileceği veritabanı hakkında da bilgi sağlanmalıdır.

Asıl model sınıfı, harici bir sınıf ise, Controller sınıfında kullanımı için öncelikle bu model sınıfı yeniden tanımlanır. Bu yeni sınıfın parametre olarak kullanılması gerekmektedir. Genellikle, Controller sınıfında bu işlem için [HttpPost] işaretleyici kullanılır.

POCO Model Binding, tek bir nesne için çalışır. Ancak, birden fazla nesne işleminin yapılması gerektiğinde Collect Model Binding kullanılabilir. POCO Model Binding işlemi, otomatik olarak bind edilecek alanları algılar ve değerleri, model alelinde alanlara atar. Bu sayede, model binding işlemi oldukça basit ve kullanışlı hale gelir.

POCO Model Binding kullanımı için şu adımlar izlenebilir:- Bind edilecek sınıf oluşturma ve alanlarını tanımlama- Controller sınıfında modelin kullanımı açıklama- HTTP istekleri ve modelin kayıt edileceği veritabanı hakkında bilgi sağlama


Complex Model Binding

ASP.NET Core MVC'de model binding, basit objelerin yanı sıra karmaşık modellerin de bağlanmasını mümkün kılar. Karmaşık modelleri bağlamak için, başka nesnelerle oluşturulmuş bir sınıf kullanarak, Model Binding Kontrolörü tarafından otomatik olarak bir model yapısı oluşturulabilir. Örneğin, bir otel rezervasyon uygulaması düşünelim. Kullanıcılar, online olarak bir oda rezervasyonu yapmak istediklerinde, farklı bilgileri doldurmaları gerekir. Bu bilgiler, otel adı, oda numarası, kişi sayısı ve ödeme seçenekleri gibi farklı alanları içerebilir. Model Binding, kullanıcıların bu bilgileri bir tek formda toplamasına olanak tanır.

Karmaşık Model Binding işlemi için bir örnek yapalım. Yukarıdaki otel rezervasyonu uygulamasında, kullanıcının ödeme yöntemini seçmesi gerekebilir. Bu seçenek bir sanal ödeme yöntemi olan PayPal dışında, banka bilgileri girilerek yapılabilir. Karmaşık Model Binding kullanarak, farklı kaynaklardan ödeme bilgilerinin alınmasını ve bunların birleştirilmesini sağlayabiliriz. Örneğin, Model Binding Kontrolörü, API aracılığıyla gelen otel bilgilerini ve kullanıcının formda doldurduğu ödeme bilgilerini birleştirerek, tek bir model yapısı oluşturabilir.

Karmaşık Model Binding, ayrıca birden fazla nesneden oluşan modelleri de kolayca bağlamaya olanak tanır. Bu nesneler arasında, uygulamadaki farklı modüller, farklı veri kaynakları veya değişken veri sayısı gibi özellikler yer alabilir. Örneğin, bir online alışveriş uygulamasının bir sipariş yönetimi sayfası vardır. Bu sayfada kullanıcılar, farklı ürünleri farklı sayılarda sepetlerine ekleyebilirler. Sepete eklenen çeşitli ürünler, farklı sınıflarda saklanabilir. Karmaşık Model Binding, bu farklı sınıfların kolayca birleştirilmesini sağlamaktadır.

Sonuç olarak, Karmaşık Model Binding, ASP.NET Core MVC uygulamalarında farklı kaynaklardan gelen verilerin otomatik olarak birleştirilmesini ve bir model yapısının oluşturulmasını sağlar. Bu sayede, uygulama geliştiricileri, uygulamalarda daha fazla işlevselliğin ve esnekliğin elde edilmesine imkan tanır. Karmaşık Model Binding, ASP.NET Core MVC'deki model bağlama işleminin en önemli parçalarından biridir ve uygulama geliştirmesi için ihtiyaç duyulan güçlü bir araçtır.


Collection Model Binding

Koleksiyon Model Binding, birden fazla veri parçasının bir koleksiyon halinde birleştirildiği durumlarda kullanılır. Bu durum genellikle checkbox veya liste kutusu gibi araçların kullanılması sonucu ortaya çıkar. Örneğin, bir web formu içinde birden fazla “checkbox” öğesi varsa ve bu öğelerin değeri “Liste” türünde bir öğeye atanırken, model binding işlemi koleksiyon tipinde çalışır.

Bir “collection model binder” türü oluşturularak, koleksiyon veri tipi kolayca oluşturulabilir. Bunun yanı sıra, “Custom editing” işlemlerinde kullanılmak için koleksiyon atama işlemi ile bir koleksiyonda bulunabilecek potansiyel hataların önlenmesi sağlanır.

Aşağıda, yukarıda verilen form örneği için verilerin nasıl koleksiyon haline getirileceği gösterilmektedir:

  • HTML Formu
  • Model Sınıfı
    • public class MyModel
      • public List<string> Colors { get; set; }

Bu örnekte görüldüğü gibi, HTML forma veri eklendiğinde, “name” özelliği “Colors” olarak tanımlandı. Bu tanım, bir koleksiyon türü olan “List” türündeki “Colors” özelliği ile eşleştirildi. Artık, her bir işaretlenmiş kutu, “Colors” koleksiyonuna bir öğe olarak eklenir.

Bu nedenle, koleksiyona dönüştürmek istediğiniz verileri gönderebilirsiniz. Controller metodunda da, “List” türündeki bir parametre “Colors” özelliği ile eşleştirilebilir. Bu şekilde, kolayca koleksiyon model binding işlemi yapabilirsiniz.


Model Binding Kaynakları

ASP.NET Core MVC'de model binding işlemi için kullanılan kaynaklar, parametre olarak iletilen verilerin nereden alınacağını belirlemede önemli bir rol oynamaktadır. Bu kaynaklar, gelen verilerin bir model nesnesine ya da herhangi bir veri türüne dönüştürülmesinde etkili olmaktadır.

Model binding işlemi yaparken, varsayılan olarak MVC altyapısı verileri HTTP isteğinin body kısmından almaktadır. Ancak, bazen farklı kaynaklardan da verileri alabilir. Model binding'in farklı kaynaklardan veri alabilmesi için aşağıdaki kaynaklar kullanılabilmektedir:

  • Query String: Model binding işlemi için kullanılan parametreler, URL adresinde query string olarak belirtilen verilerden alınabilmektedir.
  • Form Verileri: Model binding işlemi için kullanılan veriler form verilerinden de alınabilir. Bu sayede form gönderimleri sonrasında gelen veriler modele doğrudan bağlanabilmektedir.
  • JSON ve XML: Model binding işlemi için kullanılabilecek veri formatlarından ikisi de JSON ve XML formatlarıdır. Bu veri formatlarından gelen veriler kolay bir şekilde modele bağlanabilir.
  • Route Verileri: MVC yapılarından birisi de Routing'tir. Model binding işlemi sırasında, HTTP isteğinin adres bilgilerinden de gerekli veriler elde edilebilmektedir.

Bu kaynakların kullanımı, model binding işlemi sırasında belirlenebilmektedir. Örneğin, body kısmından değil de query string parametrelerinden veri almak için aşağıdaki örnekteki gibi bir adım atmak yeterlidir:

```csharppublic IActionResult Index([FromQuery] string name){ return View();}```

Yukarıdaki örnekte, [FromQuery] özelliği query string parametrelerinden veri alınmasını sağlamaktadır. Benzer şekilde, form verileri ve diğer kaynaklar da aynı şekilde kullanılabilmektedir. Bu sayede model binding işlemi çok daha esnek ve geniş bir yelpazede kullanılabilmektedir.


Adım Adım Model Binding İşlemi

Adım adım model binding işlemi, MVC uygulamalarında oldukça yaygın bir kullanıma sahiptir. Bu işlem, kullanıcının girdiği verilerin, doğrudan bir model nesnesine dönüştürülmesini ifade eder. Bu şekilde kullanıcıdan alınan veriler, uygulamaya aktarılarak işlenebilir hale gelir. İşlem için aşağıdaki adımlar izlenir:

1. HTTP isteği alınır: Kullanıcının gönderdiği HTTP isteği, uygulama tarafından algılanır. İstekte yer alan parametreler, model nesnesine dönüştürülecektir.

2. Model nesnesi oluşturulur: İstekten gelen parametreler, model nesnesine dönüştürülür. Bu sırada model nesnesinin yapısı, ModelState adı verilen bir yapı kullanılarak kontrol edilir. ModelState, hatalı girişlerin tespit edilmesini sağlar.

3. Model nesnesi doğrulanır: ModelState yapısı ile kontrol edilen model nesnesi, varsa hatalı girişler tespit edilir. Eğer bir hata varsa, kullanıcıya geri bildirim yollanarak hatanın düzeltilmesi istenir.

4. İşlem tamamlanır: Eğer model nesnesinde hata yoksa, işlem tamamlanır ve kullanıcının girdileri uygulama içinde işlenebilir hale gelir.

Model binding işlemi sırasında, kullanıcının girdileri, URL sonlarındaki parametrelerden, form verilerinden veya JSON verilerinden oluşabilir. Bu veriler, uygulama tarafından doğrudan modele dönüştürülerek işlenebilir hale getirilir. Bu sayede, kullanıcının girdiği verilerin doğrudan işlenmesi mümkün hale gelir ve kullanıcı deneyimi artar.

Model binding işlemine dahil olan farklı veri türleri, farklı yöntemlerle işlenebilir. Basit objelerin binding işlemi, POCO model binding adı verilen yöntemle gerçekleştirilebilir. Karmaşık veri yapılarının işlenmesi ise complex model binding olarak adlandırılır. Koleksiyonlarda yer alan verilerin işlenmesi ise collection model binding yöntemiyle mümkün olur.

Tüm bu işlemler, ASP.NET Core MVC uygulamalarında oldukça yaygın bir şekilde kullanılmaktadır. Bu sayede, kullanıcılardan alınan verilerin doğrudan modele dönüştürülmesi, uygulama içinde işlenebilir hale getirilmesi mümkün olur. Bu da uygulamaların kullanım kolaylığı ve verimliliğini arttırır.


Model Binding Örnekleri

Model Binding, MVC uygulamalarında oldukça sık kullanılan bir işlemdir. Bu işlem sayesinde view üzerindeki inputlar, action metodlarında kullanılabilecek objelere bağlanır. Bu bağlantı işlemi, request nesnesi içerisindeki verileri kullanarak gerçekleştirilir. İşte size birkaç örnek:

Basit bir model binding örneği:

Input Model Property
public string Name { get; set; }
public int Age { get; set; }

Yukarıdaki inputlar ile aşağıdaki action metoduna model olarak aktarabileceğiniz bir obje alırsınız:

public IActionResult MyAction(MyModel model){    // Model içerisinde Name ve Age propertyleri doludur.}

Karmaşık bir bind örneği. Aşağıdaki inputlarla birlikte bir form gönderildiği varsayılsın:

Input Model Property
public string Name { get; set; }
public Address Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public int Id { get; set; }
public decimal Amount { get; set; }

Form ile aşağıdaki action metoduna model olarak aktarabileceğiniz bir obje alırsınız:

public IActionResult MyAction(Customer model){    // Model içerisinde Name, Address, Orders propertyleri ve bunların altındaki propertyler doludur.}
Model binding örneklerinde gösterildiği gibi, model binding işlemi oldukça güçlü ve karmaşık bir özelliktir. Bu nedenle, doğru şekilde kullanıldığında, MVC uygulamalarınızda oldukça yararlıdır.