c#, MVC

“controller” ‘dan “view” ‘e tekli veri göndermek

Bir sınıf tanımlayıp gönderme veritabanından gelen veriyi “partialView” ile iletmeyi biliyoruz.
Tek veri göndereceğimiz zaman (örneğin veritabanından 20 yaş üstü olan kişileri saydırarak bir adet sayı döndürerek “view” ‘e göndereceğiz.)

Controller kısmı (HomeController):

“controller” ‘da “ViewData[“vieweGonderilenVeri”] = id;” olarak “view” ‘e gönderdiğimiz veriyi,

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication2.Models;

namespace WebApplication2.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Veri(int id)
        {
            ViewData["vieweGonderilenVeri"] = id;       //<----
            return View();
        }
    }
}

View kısmı (Veri.cshtml):
“view” ‘de “@ViewData[“vieweGonderilenVeri”]” ile yakalayıp yazdırıyoruz.

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Veri</title>
</head>
<body>
    <div>
        Verimiz: @ViewData["vieweGonderilenVeri"]       //<----
    </div>
</body>
</html>

https://localhost:44330/Home/Veri/16

bağlantımız localhost üzerinde HomeController içindeki Veri methoduna giderek ona id değişkeni olarak 16 değerini gönderiyor. Method ise bunu veri viewinin içine basarak kullanıcıya html döndürüyor.
dönen sayfada aşağıdaki sonuç var:
Verimiz: 16


Bu yöntemi çoklu verilerde kullanmak verimli değildir ama yine de ihtiyacınız olması durumunda yaratıcılığınızı kullanarak daha çeşitli şekilde veri gönderebilirsiniz. Örneğin:

Daha önce oluşturduğum “class” (Models/users.cs) ile:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication2.Models
{
    public class users
    {
        public string username { get; set; }
        public string password { get; set; }
        public int userid { get; set; }
    }
}

“contoller” içindeki veri “ActionResult” ‘ımın içinde oluşturup sınıf şeklinde göndererek

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication2.Models;

namespace WebApplication2.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Veri(int id)
        {
            var kullanicilar = new users() { userid = id, username = "Boran", password = "123123" };
            ViewData["vieweGonderilenVeri"] = kullanicilar;
            return View();
        }
    }
}

view içinde rahat okuyabilmek için models klasörünü kullanacağımı belirttim (1. satır) , kod kısmında (5. satır) models klasörü içindeki users “class” ‘ından türeyerek view e gönderilmiş verinin users “class” ‘ına ait olduğunu belirterek değişkene atadım, 17. ve 18. satırda da değişkenimin içindeki veriyi kullandım.

@using WebApplication2.Models

@{
    Layout = null;
    var gelen = (users)ViewData["vieweGonderilenVeri"];
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Veri</title>
</head>
<body>
    <div>
        Verimiz: @gelen.userid </br>
        ismi: @gelen.username
    </div>
</body>
</html>

Ama bu yöntem bir kaç değişkeni göndermek için kullanılırsa mantıklı olur. Ürünlerin veritabanından çekilerek ekrana yansıtılmasını istiyorsak “class” ‘ımızı “View()” yardımı ile göndermemiz daha mantıklı olacaktır. Zaten burada göndereceğimiz “class” EntityFramework tarafından oluşturulmuş bir “model class” olacaktır.


Veri taşıma işlemimizi “ViewBag” ile de yapabiliriz (hemen hemen aynı):

15. satırdaki gibi ViewBag yazıp noktadan sonra herhangi bir isim yazıp,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication2.Models;

namespace WebApplication2.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Veri(int id)
        {
            var kullanicilar = new users() { userid = id, username = "Boran", password = "123123" };
            ViewBag.Gidenveri = kullanicilar;
            return View();
        }
    }
}

“view” ‘de 5. satırda “controller” ‘dan gelen verinin ViewBag ile geldiğini göstermek için “controller” ‘da gönderdiğimiz isimle çağırıyoruz.

@using WebApplication2.Models

@{
    Layout = null;
    var gelen = (users)ViewBag.Gidenveri;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Veri</title>
</head>
<body>
    <div>
        Verimiz: @gelen.userid </br>
        ismi: @gelen.username
    </div>
</body>
</html>

Sonuç aynı şekilde olacaktır.

“class” tanımlayıp bu “class” ‘ın üzerinden veri tanımlayıp işlemeye (kabaca) CAST – CASTing (nesne akışı) deniyor.
Bu yöntem hem sizin CAST yazmanıza neden oluyor hem de “ViewData” ve “ViewBag” bir “Dynamic Type” olduğu için çoklu verilerde çok fazla performans kaybına sebep olur.

Yazı oluşturuldu 38

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön