c# Web

Core Mvc Projesinde Kullanıcıdan Farklı Veri Alma Yöntemlerini Kullanarak Toplama İşlemini Gerçekleştirme

Core Mvc web uygulamalarında kullanıcıdan birden fazla yöntemle verileri alıp işleyebilirsiniz. Bu yöntemleri projedeki isteğinize göre seçip uygulayabilirsiniz. Ben bu yöntemlerin tamamını basit bir toplama işlemini gerçekleştirerek anlatmaya çalışacağım. 

Visual Studio 2022 programını açalım.

Yeni bir boş Core projesi oluşturalım. İsmini VeriAlmaYontemleri olarak belirleyelim.

Temel ayarların yapıldığı program.cs dosyasını düzenleyelim.

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMvc();
var app = builder.Build();

app.UseDefaultFiles();
app.UseStaticFiles();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}"
    );

app.Run();

Projeyi çalıştıralım. Controller bulunamadığı için hata verecektir. Öncelikle MVC projesi için gerekli olan klasörleri oluşturalım. Projemizi çalıştıralım. Controllers panelinde dosya olmadığı için hata verecektir.

Şimdi Controllers klasörü içine HomeController dosyasını oluşturalım. Aşağıdaki gibi bir action metodu oluşturulacaktır. Bu metod Index() isimli view dosyasını döndürecektir.

        public IActionResult Index()
        {
            return View();
        }

Break point atalım. Projeyi çalıştıralım. Index() isimli metod çalıştırılacak ancak bu dosya Views klasöründe olmadığı için hata verecektir. Şimdi Views klasörü altında Home klasörünü, bunun altında Index dosyasını oluşturalım.

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Toplama İşlemi</title>
</head>
<body>
</body>
</html>

Projeyi çalıştıralım. Proje hatasız bir şekilde çalıştırılır. Projede bootstrap ve jquery kütüphanelerini yüklemek için wwwroot klasörünü ekleyelim. Projeye bootstrap eklemek için proje isminin üzerinde farenin sağ tuşuna basalım. Ekrana gelen içerik menüsünden Add diyelim. Burada yer alan komutlardan Client-Side Library komutunu çalıştıralım. Ekrana gelen form sayfasında library kutusuna bootstrap yazalım. Install diyerek kurulum işlemini tamamlayalım. Aynı komutu kullanarak projeye jquery kütüphanesini de ekleyelim. Index view dosyasına bootstrap ve jquery kütüphanelerini dahil edelim.

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Toplama İşlemi</title>
    <link href="~/lib/bootstrap/css/bootstrap.min.css" 
rel="stylesheet" />
    <script src="~/lib/jquery/jquery.min.js"></script>
    <script src="~/lib/bootstrap/js/bootstrap.min.js">
</script>
</head>
<body>
</body>
</html>

Projeyi çalıştıralım. Kütüphanelerin projeye hatasız bir şekilde eklendiğinden emin olalım. Kullanıcıdan veri almak için <form> etiketi kullanılır. Bu etiket sunucuyla iki farklı yöntemle haberleşir. Bunlar post ve get yöntemidir. Bu yöntemleri kullanarak kullanıcıdan farkli şekillerde veri alabilirsiniz. Şimdi bunları örnek üzerinde göstermeye başlayalım.

Post metoduyla veri alma

Name özelliğini kullanarak veri alma yöntemi

Bu yöntemde input etiketiyle kullanıcıdan veri alınırken etikete ait name özelliği kullanılır. View tarafında kullanılan name isimleri controller tarafında da aynı isimle karşılanmalıdır. Şimdi toplama işlemine ait form tasarımını name özelliğini kullanarak yapalım.

   <div class="container mt-3">
       <h2>Toplama İşlemi</h2>
       <form asp-action="Index" asp-controller="Home" 
method="post">
           <div class="mb-3 mt-3">
               <label for="a">A Sayısı:</label>
               <input type="number" 
class="form-control" id="a" 
placeholder="a sayısını giriniz..." name="txtA" 
autofocus>
           </div>
           <div class="mb-3">
               <label for="b">B Sayısı:</label>
               <input type="number" 
class="form-control" id="b" 
placeholder="b sayısını giriniz" name="txtB">
           </div>
           <button type="submit" 
class="btn btn-primary">Topla</button>
           <div class="mb-3">
               <label>@ViewBag.txtC</label>
           </div>
       </form>
   </div>

Projeyi çalıştıralım. Form sayfasında a ve b sayılarını girelim. Girilen bu sayıların controller tarafında karşılanması gerekir. Bunun için input nesnelerinin name değerlerine karşılık birebir aynı değişkenleri tanımlamamız gerekir. Bu arada post işleminin gerçekleşmesi için Index metodu parametreli olarak post işlemi için tanımlanmalıdır. Controller kısmında Index metodunu override edelim.

[HttpPost]
public IActionResult Index(string txtA, string txtB)
{
    int a, b, c;
    a = Int32.Parse(txtA);
    b = Int32.Parse(txtB);
    c = a + b;
    ViewBag.txtC = $"{a} + {b} = {c}";
    return View();
}

Burada elde edilen sonucun view ekranına taşınması için ViewBag() metodu tanımlanmıştır. Projeyi çalıştırdığımızda toplama işleminin yapıldığını görürsünüz.

Name özelliklerini saklayan tanımlı class sınıfını kullanarak veri alma

Kullanıcıdan gelen verilerin çokluğu veya karmaşıklığını önlemek amacıyla view tarafında tanımlı name özelliklerini baz alarak bir sınf tanımlanabilir. Bu sınıf aracılığıyla tip dönüşümlerine gerek kalmadan verileri almak mümkün olmaktadır. Controller tarafında aşağıdaki gibi bir sınıf tanımlayalım.

public class Datas
{
    public int txtA { get; set; }
    public int txtB { get; set; }
}

Tanımlanan bu sınıf yardımıyla view tarafından gelen bilgileri karşılayabiliriz. Şimdi Index metodunu düzenleyelim.

[HttpPost]
public IActionResult Index(Datas data)
{
    int a, b, c;
    a = data.txtA;
    b = data.txtB;
    c = a + b;
    ViewBag.txtC = $"{a} + {b} = {c}";
    return View();
}

IFormCollection kullanarak veri alma

Bu yöntemde view tarafından gelen verilerin tamamı bir dizi içinde saklanır. Programcı name özelliklerine göre bu dizi elemanlarının içeriğine ulaşabilir. Bu yöntemi test etmek için controller tarafında tanımlı Index metodunu aşağıdaki gibi düzenleyelim.

[HttpPost]
public IActionResult Index(IFormCollection datas)
{
    int a, b, c;
    a = Int32.Parse(datas["txtA"].ToString());
    b = Int32.Parse(datas["txtB"].ToString());
    c = a + b;
    ViewBag.txtC = $"{a} + {b} = {c}";
    return View();
}

Model Binding kullanarak veri alma

Bu yöntemde view tarafından gelen verilerin işlenip tekrar gönderilmesi işlemi tanımladığımız model tasarımıyla gerçekleşmektedir. Oluşturduğumuz modele ait tüm özellikleri hem view hem de controller tarafında kullanabiliriz. Şimdi Models klasörü altına Datas isminde bir class oluşturalım. Dosyanın içeriği aşağıdaki gibi olacaktır.

    public class Datas
    {
        public int a { get; set; }
        public int b { get; set; }
        public int c()
        {
            return a + b;
        }
    }

Tanımladığımız bu modele göre web sayfasının tasarımını yeniden yapalım.

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

@model VeriAlmaYontemleri.Models.Datas

<!DOCTYPE html>

<html lang="tr">
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Toplama İşlemi</title>
    <link href="~/lib/bootstrap/css/bootstrap.min.css" 
rel="stylesheet" />
    <script src="~/lib/jquery/jquery.min.js"></script>
    <script src="~/lib/bootstrap/js/bootstrap.min.js">
</script>
</head>
<body>
    <div class="container mt-3">
        <h2>Toplama İşlemi</h2>
        <form asp-action="Index" 
asp-controller="Home" method="post">
            <div class="mb-3 mt-3">
                <label for="a">A Sayısı:</label>
                <input type="number" 
class="form-control" id="a" 
placeholder="a sayısını giriniz..." asp-for="a" autofocus>
            </div>
            <div class="mb-3">
                <label for="b">B Sayısı:</label>
                <input type="number" 
class="form-control" id="b" 
placeholder="b sayısını giriniz" asp-for="b">
            </div>
            <button type="submit" 
class="btn btn-primary">Topla</button>
            <div class="mb-3">
                <label>@ViewData["sonuc"]</label>
            </div>
        </form>
    </div>

</body>
</html>

Burada dikkat ettiyseniz öncelikle modelimizi sayfaya dahil ediyoruz. Input nesneleri için kullanlıan name değerlerini siliyoruz. Bunun yerine asp-for parametresini kullanıyoruz. Bunların değerlerini modelde kullandığımız değerler olarak atıyoruz. Böylece hem değişkenlerin isminde hem de değişkenlerin veri tipinde ortak nokta kullanılmış oldu. Şimdi de controller kısmında yer alan dosyamızı düzenleyelim.

        [HttpPost]
        public IActionResult Index(Datas data)
        {
            ViewData["sonuc"] = 
$"{data.a} + {data.b} = {data.c()}";
            return View();
        }

Get metoduyla veri alma

Name özelliğini kullanarak veri alma yöntemi

Bu yöntemde input etiketiyle kullanıcıdan veri alınırken etikete ait name özelliği kullanılır. View tarafında kullanılan name isimleri controller tarafında da aynı isimle karşılanmalıdır. Şimdi toplama işlemine ait form tasarımını name özelliğini kullanarak yapalım.

   <div class="container mt-3">
       <h2>Toplama İşlemi</h2>
       <form asp-action="Index" asp-controller="Home" 
method="get">
           <div class="mb-3 mt-3">
               <label for="a">A Sayısı:</label>
               <input type="number" 
class="form-control" id="a" 
placeholder="a sayısını giriniz..." name="txtA" 
autofocus>
           </div>
           <div class="mb-3">
               <label for="b">B Sayısı:</label>
               <input type="number" 
class="form-control" id="b" 
placeholder="b sayısını giriniz" name="txtB">
           </div>
           <button type="submit" 
class="btn btn-primary">Topla</button>
           <div class="mb-3">
               <label>@ViewBag.txtC</label>
           </div>
       </form>
   </div>

Projeyi çalıştıralım. Form sayfasında a ve b sayılarını girelim. Girilen bu sayıların controller tarafında karşılanması gerekir. Bunun için input nesnelerinin name değerlerine karşılık birebir aynı değişkenleri tanımlamamız gerekir. Bu arada get işleminin gerçekleşmesi için Index metodu parametreli olarak get işlemi için tanımlanmalıdır. Controller kısmında Index metodunu override edelim.

[HttpGet]
public IActionResult Index(string txtA, string txtB)
{
    int a, b, c;
    if (txtA != null && txtB != null)
    {
        a = Int32.Parse(txtA);
        b = Int32.Parse(txtB);
        c = a + b;
        ViewBag.txtC = $"{a} + {b} = {c}";
    }

    return View();
}

Burada elde edilen sonucun view ekranına taşınması için ViewBag() metodu tanımlanmıştır. Projeyi çalıştırdığımızda toplama işleminin yapıldığını görürsünüz.

QueryString kullanarak veri alma

Bu metod kullanıcıdan veri gelip gelmediğini kontrol eder. Veri gelmişse Query özelliğini kullanarak ilgili veriler işlenir. Controller tarafında tanımlı Index dosyasını düzenleyelim.

public IActionResult Index()
{
    var queryString = Request.QueryString;
    if (queryString.HasValue == true)
    {
        int a, b, c;
        a = Int32.Parse(Request.Query["txtA"].ToString());
        b = Int32.Parse(Request.Query["txtB"].ToString());
        c = a + b;
        ViewBag.txtC = $"{a} + {b} = {c}";
    }
    return View();
}

Projeyi çalıştıralım. Değerleri girdiğimizde toplama işlemini gerçekleştirebiliriz.

Name özelliklerini saklayan tanımlı class sınıfını kullanarak veri alma

Kullanıcıdan gelen verilerin çokluğu veya karmaşıklığını önlemek amacıyla view tarafında tanımlı name özelliklerini baz alarak bir sınf tanımlanabilir. Bu sınıf aracılığıyla tip dönüşümlerine gerek kalmadan verileri almak mümkün olmaktadır. Controller tarafında aşağıdaki gibi bir sınıf tanımlayalım.

public class Datas
{
    public int txtA { get; set; }
    public int txtB { get; set; }
}

Tanımlanan bu sınıf yardımıyla view tarafından gelen bilgileri karşılayabiliriz. Şimdi Index metodunu düzenleyelim.

[HttpGet]
public IActionResult Index(Datalar data)
{
    int a, b, c;
    a = data.txtA;
    b = data.txtB;
    c = a + b;
    ViewBag.txtC = $"{a} + {b} = {c}";
    return View();
}

İlgili Makaleler
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem İkinci Yazılı Çalışma Soruları
2020 TYT Matematik Ortakatlı Kuralıyla İlgili Sorunun Çözümünü c# Diliyle Web Form Sayfasında Kodlama
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama1
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem Birinci Yazılı Çalışma Soruları
Visual Studio 2022 Programında Asp.Net Web Application Şablonu Görünmüyor Hatasını Düzeltme
Core Mvc Projesinde Tuple Nesneleri Post Etme ve Yakalama İşlemleri
Seri Port Yardımıyla Arduino Devresine Bağlanıp Ledleri Asp.Net Web Uygulamasından Yakıp Söndürme
Sitenin Alexa Dünya Sıralamasını Kodlarla Öğrenme
Personele Ait Boy ve Kilo Bilgilerine Göre İdeal Kiloyu Bulan Uygulamayı Asp.Net İle Yapınız
Bir Otobüs Firmasına Ait Bilet Satış İşlemlerini Class(Sınıf) Tanımlayarak Yapan c# Form Uygulaması
Asp.Net Uygulamasında Manual Olarak JSON Oluşturma
Web Uygulamalarında SqLite Kullanımı
Asp.Net Uygulamalarında DataList (Veri Listeleme) Kontrolü
C# Uygulamasında Miladi Takvimi Hicri Takvime, Hicri Takvimi Miladi Takvime Dönüştürme
RadioButton ile Cinsiyet Bilgisini Alan Asp.Net c# Uygulaması
2022 TYT Matematik Onbirinci Sorunun Çözümünü c# Diliyle Web Form Sayfasında Kodlama
Asp.Net Uygulamalarında Modal PopUp Oluşturma
Asp.Net Uygulamalarında RequiredFieldValidator İşlemi
Visual Studio 2019 Programında c# İle Hazırlanan Web Projesini Local Sunucuda Yayınlama
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama4

Yorum Ekle
   
Kötü İyi