SelamünAleyküm, bu yazımızda Model Binding'e giriş yapacağız. Bu yazıda Model Bİnding'in kullanıcılardan bazı veri alma yöntemlerini ele alacağız.
Model Binding, projeye yaptığımız isteklerden gelen verilerin Controller tarafındaki Action metotlarındaki parametrelere uygun olarak aktarmaktır. Bu şekilde kullanıcı tarafından gönderilmesi gereken verileri projemiz alır ve bu değerlere göre sonucunu döner. Gönderilen değerler, Action metotlarımızdaki parametreleriyle eşler.
Mesela projeye e-posta adresimizle giriş yapmak için bir request ( istek ) gönderdiğimizde Contorler tarafında e-posta adresini yakalamak için yapılan işlemler, Model Binding ( Model Bağlama ) kavramına girmektedir. Controller tarafındaki Action metodundaki ilgili parametre, gönderilen e-posta adresiyle eşleşir.
Url'den gönderdiğimiz Query String ile veriyi alıp Controller tarafında istediğimiz gibi kullanabiliriz.
Sayfaların adreslerinde ? ile başlayan ve devamında bir isim verilip ona bir değer verilen alanları görürsünüz. Bu alanlar projenin backend ( Arka Uç ) kısmına parametre göndermek içindir. Proje Url'e bakar ve orada gördüğü Query String ifadesini yakalar. Bu şekilde Controller katmanında değişkenlerimize değerler atayıp projemizde bu değerleri kullanabiliriz. Misalen, https://hasanbozkus.com.tr/Blog/Searchcubugu?query=hasan adresi ile istekte bulunursak backend tarafında query değişkenine "hasan" değerini atayacak ve query değişkeni ile ilgili işlemleri yapacaktır.
Misalen, HomeController içinde Index metodumuz olsun. Index metodumuz string bir parametre alsın ve aldığı parametreyi string olarak döndürüp ekrana yazdırsın.
public string Index(string result)
{
return result;
}
uygulamamızı çalıştıralım.
Görüleceği üzere isteğimizde Query String olarak result değişkenine "hasan" ismini gönderdik. Böylece projemiz bu değerleri Action metodundaki result değişkenine atadı ver geriye aynı değeri döndürüp ekrana yazdı.
Projemize tanımladığımız Route yapıları ile de Action metotlarımıza veri gönderebiliriz. Projeye istekte bulunduğumuzda Url'de geçen ifade Route yapısında denk gelen değişken ile eşleşir.
Misalen, Startup.cs sınıfnda Id'yi alabileceğimiz bir Route tanımlayalım.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "getid",
pattern: "getid/{Id}",
defaults: new { controller = "Home", action = "GetId });
});
Route yapımızda da görüleceği üzere almak isteğimiz parametreyi süslü parantezlerle belirtiyoruz. Şimdi de HomeController içinde GetId isimli bir Action metodu oluşturalım. Oluşturduğumuz Action bir Id parametresi alsın ve parametreyi ekrana yazdırsın.
public int GetId(int Id)
{
return Id;
}
F5 ile Çalıştıralım.
https://localhost:44358/getid/8 le istekte bulunalım. Buradaki 8 ifadesi bizim Route'mizde belirttiğimiz Id parametresine denk gelecektir. Action metodu, Id parametresini Route yapımızda yakalayıp ekrana yazdırmak için geri döncektir.
Şimdi ise Id parametresine null olabilme özelliği ekleyelim.
Misalen aynı örneği ufak revizelerle tekrar yazalım.
Route yapamızıda Id parametresinin sonuna soru işareti koyalım.
app.UseEndpoints(endpoints =>
name: "getid",
pattern: "getid/{Id?}",
defaults: new ( controller = "Home", action = "GetId"));
Şimdi ise Action metodunda Id parametresinin tip tanımlamasının sonuna soru işareti koyalım ve geri dönen değer string tipinde olsun. Id'nin null gönderilmesi takdirde 'Id bulunamadı' mesajını döndürelim.
public string GetId(string Id)
{
return Id == null ? "Id bulunamadı": "Id:" + Id;
}
https://localhost:44358/getid bu şekilde istekte bulunalım.
Url'den herhangi bir değer gönderilmediği için Id parametresi ? ifadesi ile null değerini aldı.
View tarafında yazılan form ile Action metotlarımıza Model gönderebiliriz. Bu şekilde kayıt ekleme vb. sayfalar oluşturup bu sayfalaradan gelen verileri backend tarafına gönül rahatlığıyla gönderebiliriz. Formun içresinideki alanlar Action metotlarımızda var olan parametrelere denk gelenler ile eşleşecektir.
Misalen, Person ve Image isimli Modelimizi oluşturalım ve içine Property tanımlamalarını yapalım.
public class Person
{
public int Id { get; set; }
public stirng Name { get; set; }
public Image Image { get; set; }
}
public class Image
{
public int Id { get; set; }
public int width { get; set; }
public int height { get; set; }
}
PersonController isimli bir Controller'imiz olsun. Contorller içinde Index ve Create mototlarımız olsun. Form yardımıyla Create Action'muza, Person isimli Modelimize ait değerleri girelim.
public class PersonController : Controller
{
public IActionResult Index(Person person)
{
return Views(person);
}
public IActionResult Create()
{
return Views();
}
public IActionResult Create(Person person)
{
return Views("Index", person);
}
}
Create View'imizi oluşturup içine Form'dan alacağımız verileri yazalım.
@model Model_Binding_incelemesi.Models.Person
@{
Layout = null;
}
@using (Html.BeginForm("Create"))
{
<table>
<tr>
<td>Id:</td>
<td>
<input id="Id" name="Id" type="text" value="" />
</td>
</tr>
<tr>
<td>İsim:</td>
<td>
<input id="Id" name="Name" type="text" value="" />
</td>
</tr>
<tr>
<td>Fotoğraf Id:</td>
<td>
<input id="Id" name="Image.Id" type="text" value="" />
</td>
</tr>
<tr>
<td>Fotoğraf Boy:</td>
<td>
<input id="Id" name="Image.Height" type="text" value="" />
</td>
</tr>
<tr>
<td>Fotoğraf En:</td>
<td>
<input id="Id" name="Image.Width" type="text" value="" />
</td>
</tr>
<tr>
<td>
<input type="submit" value="Kaydet" />
</td>
</tr>
</table>
}
Index Action metoduna ait View'imizi oluşturalım. Create isimli View'inden alacağımız verileri buraya yazalım.
@model Model_Binding_incelemesi.Models.Person
@{
Layout = null;
}
<table>
<tr>
<td>Id:</td>
<td>
@Model.Id
</td>
</tr>
<tr>
<td>İsim:</td>
<td>
@Model.Name
</td>
</tr>
<tr>
<td>Fotoğraf Id:</td>
<td>
@Model.Image.Id
</td>
</tr>
<tr>
<td>Fotoğraf Boy:</td>
<td>
@Model.Image.Height
</td>
</tr>
<tr>
<td>Fotoğraf En:</td>
<td>
@Model.Image.Width
</td>
</tr>
</table>
Projemizi çalıştırdığımızda https:44358/Person/Create ile istekte bulunduğumuzda karşımıza gelecek olan alanları dolduralım.
Formdaki alanları doldurduktan sonra Kaydet butonuna basalım ve Create metodumuza bir breatpoint koyup ne olduğuna bakalım.
Ekran çıktısanda da görüleceği üzere formdan HttpPost kullanarak modelimize verileri gönderdik. F5 ile devam edelim ve bu verileri Index View'ine gönderelim.
Not: |
HttpGet ve HttpPost ileriki konularda anltılacaktır inşallah. |
Formdaki değerler Action metodundaki Person sınıfının Property'lerindeki isimlerle eşleşmiş ve formdan aldığımız verileri bu Property'lere aktarılmıştır.
Bu yazımızın sonuna gelmiş bulunuyoruz, bu şekilde Model Binding konusunun bir kısmını ele almış olduk. Sonraki yazımızda Model Binding'in diğer özelliklerinden devam edeceğiz. Bu yazıya ait projenin github linikne buradan ulaşabilirsiniz. İlgilenenlerin faydalanması ümidiyle.
Yazılım, teknoloji ve daha fazlası için bizi takip edin.
© Techno Guide. Tüm Hakları Saklıdır.
HTML Codex Tasarımıdır.