Asp.Net C# Session Sepet Yapmak

Asp.Net C# Session Sepet Yapmak

Genelde e-ticerat sitelerinde uygulanan bildiğimiz market sepetlerinin dijital olanı asp.net sayfamız için vb.net kullanarak yapalım.

Gerekli yerlerde kullandığımızda oluşabiliecek hatalarının önüne geçmek için sepet ve urun adında iki sınıf tanımlayalım! Daha sonra bu sınıflar üzerinden Session("sepet")'i yöneteceğiz.

Urun.cs

public class Urun
{
    //ürüne ait kayıt olan benzersiz sayi
    public int id { get; set; }
    //ürün adı
    public string adi { get; set; }
    //ürünün fiyatı
    public double fiyat { get; set; }
    //sepet güncelle ve toplamı için adet
    public int adet { get; set; }
    //ürün fiyatı ile adeti çarpıp bir kalemdeki toplamı
    public double ToplamFiyat
    {
        get { return adet * fiyat; }
    }
}

Sepet.cs

public class Sepet
    {
    //tanımladığımız urun sınıfını liste olarak alıyoruz
    public Dictionary urunler = null;
    public New()
        {
        //sınıf ilk çağrıldığında sepetle ürünü ilişkilendiriyoruz.
        urunler = new Dictionary();
        }
        //yukarda oluşturduğumuz listeye eleman eklemek için
     public void Ekle(Urun u)
        {
         if (urunler.ContainsKey(u.id)) {
         //zaten listede(yani sepette varsa) sadece adetini 1 artırıyoruz
             urunler[u.id].adet += 1;
             } else {
                  //listede yoksa benzersiz idsi ile listemize ekliyoruz.
                  urunler.Add(u.id, u);
	            }
         }
   }

buraya kadar herşey tamam sayfalarımızda yapacağımız işlemlere geçmeden önce bir kontrol mekanızması oluşturuyorum. Ürünün sepette olup olmadığı geri döndüren bir fonksiyon. Sepette varsa True yoksa False değeri dönecek şekilde ayarlıyorum.

Sepette Varmı Fonksiyonu

private bool SepetteVarmi(int id)
        {
            //önce sunucu tarafında kullanıcının başlattmış olduğu sepet değişkeni varmı onu kontrol ediyorum
            //bu kontrol olmazsa doğal olarak hata verecektir.
            if (Session["sepet"] == null)
            {
                //sepet değişkeni oluşturulmadığı için false değeri döndürüyoruz
                return false;
            }
            else
            {
                //sepet değişkeni varsa
                //oluşturduğumuz sepet sınıfını eşitliyoruz     
                Sepet sepetim = (Sepet)Session["sepet"];
                //global session değişkenini Sepet sınıfımıza bu sınıfıda sepetim isimde bir nesne ile işlem yapmak için tanımladım.
                //sepet sınıfı içerisinde benzersiz anahtar sayı olarak urun.id olarak tanımlamıştım.
                //bir for döngüsü ile sepet sınıfı içerisi kontrol ediyorum 
                foreach (int key in sepetim.urunler.Keys)
                {
                    //id=kontrol ettiğimiz ürünün idsi
                    //key ise sepet sınıfında bulunan ürünlerin idsi oluyor
                    //yani id=key ise ürün seppette var demektir.
                    if (id == sepetim.urunler(key).ID)
                    {
                        //iki eşit olduğuna göre aynı üründür true değeri döndürüyoruz.  
                        return true;
                    }
                    else
                    {
                        //sepet sınıfı içerisinde ürün bulunamamıştır. false değeri döndürüyoruz.
                        return false;
                    }
                }
            }
        }

Sepete Ürün Eklemek Güncellemek İstediğimizde

//ürün eklemek / güncellemek için önce urun sınıfımıza işlem yapacağımız ürün için bir adet oluşturuyoruz.
Urun urun = new Urun();
urun.id = 1;
//ürünün veritabında kayıtlı olan benzersiz numarası
urun.adi = "ürün adı";
urun.fiyat = 15.5;
// ürün fiyatı
urun.adet = 1;
//sepet değişkeni varmı kontrol edelim
if (Session["sepet"] == null)
{
   //sepet değişkeni yok
   //sepet değişkeni oluşturup az önce önce oluşturduğumuz yeni ürünü aktarıyoruz. 
   Sepet sepetim = new Sepet();
   sepetim.Ekle(urun);
   Session["sepet"] = sepetim;
}
else
{
   //sepet değişkeni var içeriğini korumak ve yeni ekleyebilmek için kontrol etmeliyiz
   //yazdığımız fonksiyonu çağırıp ürün varmı bakıyoruz.
   if (SepetteVarmi(urun.id) == true)
       {
           //true değeri dönerse var demektir
           //güncelle
           int id = urun.id;
           Sepet sepetim = (Sepet)Session["sepet"];
           sepetim.urunler(id).adet += 1;
           Session["sepet"] = sepetim;
       }
       else
       {
           Sepet sepetim = (Sepet)Session["sepet"];
           sepetim.Ekle(urun);
           Session["sepet"] = sepetim;
       }
}

Sepeten Çıkarmak istediğimizde

int id = x; //çıkarmak istediğimiz ürünün idsi
//sepeti çağırıyoruz
Sepet sepetim = (Sepet)Session["sepet"];
//sepet sınıfı içindeki ürünü siliyoruz
sepetim.urunler.Remove(id);
Session["sepet"] = sepetim;

Sepet içeriğine erişmek listemek istediğimizde

//sepeti çağırıyoruz
{
	Sepet sepetim = (Sepet)Session["sepet"];
	//for döngüsü ile tüm elemanları alabiliyoruz.
	foreach (int i in sepetim.urunler.Keys) {
		Response.Write(sepetim.urunler(i).id);
		Response.Write(sepetim.urunler(i).adi);
		Response.Write(sepetim.urunler(i).fiyat);
	}
}

Umarım faydalı olmuştur.


Kodları indirmek için buraya tıklayınız.

Yorumlar : 22 Adet
  • Mehmet özdemir
    11 Ekim 2011 Salı 23:27
    4366 gün önce
    Hocam sepeti nasıl cagırıyorum bunlar sadece .cs kodları normal aspx kodları yok mu acaba? baya kafa karıstırıcada
  • 12 Ekim 2011 Çarşamba 19:52
    4365 gün önce
    aspx kodlarını yazmaya gerek görmedim. Grid, repeater vb. çok farklı şekillerde kullanılabilir. Kullanmak istediğiniz kontrolü belirtirseniz yardımcı olabilirim. Ayrıca ilk fırsatta jQuery çok daha ayrıntılı bir örneği tüm kodlarıyla beraber paylaşacağım. Kolay gelsin...
  • Mehmet Özdemir
    13 Ekim 2011 Perşembe 19:52
    4364 gün önce
    Hocam şimdi bende alışveriş sepet uygulaması yapmak istiyorum.Fakat grid ile değilde listview ile itemleri listeleyip işte sepete at ve ürün detayı diye de 2 link koymak istiyorum.sepete at diyince sepete eklesin diger türlü de ürünü gösterecek sekilde.baktıgım örneklerin tümü grid ile yapılmış.grid ile ürünleri listview deki gibi görüntüleyemiyoruz.
  • 23 Ocak 2012 Pazartesi 17:27
    4262 gün önce
    Yukardaki örnek genel amaç doğrultusunda yazılmıştır. Session içerisinde verileri list tipinde saklamıştım. Sizin yapmanız gereken ListView için kullanacağınız datasource belirlemek. Yani listview.datasorce=sepetlist (list) yada datasorce=sepetdatatable(datatable) olarak yapılandırmak ve session içerinde bu tipi saklamak olmalıdır. Listviewinızın datasource kaynağını nasıl yapılandırdığınıza göre değişir. Kullandığınız yöntemi belirtirseniz ona göre kodla örnek verebilir. Kolay gelsin!
  • muhammet
    23 Mayıs 2012 Çarşamba 20:54
    4141 gün önce
    hocam bu kodları yazdm bir türlü olmadı. yardım edermsnz? face veya msn varsa
  • 20 Haziran 2012 Çarşamba 16:10
    4113 gün önce
    Çok yakında jQuery ile daha etkileşimli bir örnek hazırlayacağım. Çalışır durumda projeyide ekleyeceğim.
  • Mehmet Özdemir
    10 Temmuz 2012 Salı 12:02
    4094 gün önce
    Hocam Jquery ile yapacagınız zaman örneği lütfen veritabanlı calısan yapın ve sayfayı yenileyince sepet gitmesin arıyorum baya zamandır php de oldugu gibi asp.net te söyle güzel efektli bir sepet bulamadım :Ss
  • dilek
    17 Nisan 2013 Çarşamba 14:11
    3813 gün önce
    teşekkürler çok yardımcı oldunuz
  • Murat
    11 Mayıs 2013 Cumartesi 10:11
    3789 gün önce
    Hocam size zahmet kaynak dosyayı eklerseniz.
  • mahmut yılmaz
    29 Mayıs 2013 Çarşamba 11:32
    3771 gün önce
    merhaba hocam bu session sabit bir isimde olduğu için her clientin sepeti bir sessionda tutuluyor. Dolayısı ile bir kullanıcının sepeti başka kullanıcıdada gösteriyor. Bu olayı nasıl çözebilirim.
  • sami yıldız
    29 Mayıs 2013 Çarşamba 17:47
    3770 gün önce
    Hocam birçok yerde hata alıyorum kaynak dosyalarıda paylaşır mısınız?
  • 29 Mayıs 2013 Çarşamba 20:57
    3770 gün önce
    @murat, @sami ilk fırsatta konuyu güncelleyeceğim ve kaynak dosyasınıda ekleyeceğim.

    @mahmut session konusunda söylediklerin yanlış. Bir kullanıcının sepeti başka bir kullanıcıda görütülenmez. Session oturum demektir. Ve her kullanıcı için sunucu tarafında ayrı ayrı tutulur. Session konusunu iyi araştır derim.
  • mahmut
    29 Mayıs 2013 Çarşamba 23:14
    3770 gün önce
    Mesaj Hocam neofertil.com adresini incelerseniz göreceksiniz. sepete ürün ekliyorum. Başka bir bilgisayardan baktığımda sepetim boş olmasına rağmen diğer bilgisayarda eklediğim ürünleri görüyorum. yardımcı olursanız sevinirim...bu sitedeki örneği kullanarak yapmıştım.. http://www.webkariyer.net/makale/asp-net/129/asp-net-alisveris-sepeti-uygulamasi.aspx
  • mahmut yilmaz
    30 Mayıs 2013 Perşembe 11:22
    3770 gün önce
    http://net.tutsplus.com/tutorials/other/build-a-shopping-cart-in-aspnet/ Bu sitedeki örnekte aynı şekilde.. Projeyi çalıştırıyorum chromeda. sepetime ürünü ekliyorum. Sonra ie ve firefoxtan baktığımda chromadaki sepet listesi diğer tarayıcılarda da görünüyor. Sunucuya atıyorum farklı bilgisayarlada deniyorum sonuç aynı. Yardımcı olabilir misiniz?
  • asp.net ci
    21 Eylül 2013 Cumartesi 05:05
    3656 gün önce
    Bu kodların çalıştığından eminmisiniz çoğu yerde hata var..
  • murat
    4 Temmuz 2014 Cuma 16:17
    3369 gün önce
    hocam kodlarda gercekten hata var, ilgilenme gibi bir durumunuz varmidir.
  • 5 Temmuz 2014 Cumartesi 12:37
    3369 gün önce
    Arkadaşlar biraz geç yanıt yazmak zorunda kaldığım için özür dilerim. Yoğunluktan fırsat bulamadım. Kodları renklendirmeye yarayan SyntaxHighlighter javascript eklentisi orjinal kod üzerinde nedendir bilmem değişiklik yapıyor. Bunu yeni fark ettim. En kısa sürede bunu da düzelteceğim.

    https://docs.google.com/file/d/0B-V7GqGmPTGwQklKRkNQeEpJcG8 bağlantısından kaynak kodu indirebilirsiniz.

    Ramazan ayı içerisinde inşallah bolca zamanım olacak. Sepet(ekle,çıkar,güncelle vs.) olayını Asp.net ve jQuery ile yapıp kaynak kodlarınıda yayınlayacağım. Bu konu ile ilgili eklemek istedikleriniz, şu da olsa iyi olur dedikleriniz var ise bu konu altından yazacağınız yorumlarınızla bana iletebilirsiniz. Hayırlı ramazanlar, görüşmek üzere :)
  • tekin
    2 Eylül 2014 Salı 15:13
    3310 gün önce
    sepet numarasını neye göre oluşturuyorsun ? nerden değer atıyorsun
  • 3 Eylül 2014 Çarşamba 16:57
    3308 gün önce
    Bu örnek uygulamada elle manuel olarak tanımladım. Normal projenizde ürün id lerini kullanabilirsiniz!
  • Burak Kaya
    23 Kasım 2014 Pazar 16:39
    3227 gün önce
    Merhaba, Öncelikle verdiğin örnek sepet projesi için teşekkür ederim. Çok işimi yaradı. Ama takıldığım bir yer var. Sepet ekle güncelle listele herşey çalışıyor ama silmede sıkıntı yaşıyorum. Yani siliyorum listelerken göstermiyor ama onun bir yerlerde tutuyor ve onu varmış gibi sayıyor. Breakpointle kontrol ettim hala bir yerlerde duruyor tam silemiyor galiba.
  • 25 Kasım 2014 Salı 21:12
    3225 gün önce
    Eğer silme işlemini örnek koddaki gibi yapıyorsanız, yani listeden ürün silindikten sonra listenin son halini sessioana tanımlıyorsanız sorunsuz çalışması lazım. Zira yaptığım onlarca projede bu şekilde çalışıyor. Web sunucu üzerinde test ettiniz mi? Halen sorun yaşıyorsanız silme işlemini yaptığınız kod parçacığını bana iletebilirsiniz.
  • Burak Kaya
    25 Kasım 2014 Salı 21:16
    3225 gün önce
    Bende dediğiniz gibi yaptım zaten. Orda sizin için bir eksik var. Listenin son halini sessiona attıktan sonra foreach ile sayısını kontrol ettirmelisiniz ve eğer içinde yoksa session.remove yapmalısınız. benimde sorunum buydu ve size anlattığım şekilde yaparak hallettim. çünkü sizin attığınızda sepet boş olunca bile session kapanmıyor ve varmış gibi işlem yapıyor. Umarım anlatabilmişimdir :)
Yorum Önizleme
  •  
Yorum Yazın
İsminiz
* zorunlu
E-Posta
* zorunlu [gizli kalacak]
Web
Yorumunuz
Site İçi Arama
Takipte Kalın
Rss beslemesine abone olun Yeni yazıları eposta ile alın Profesyonel Linkedin ağıma katılın Facebook arkadaş listenize ekleyin Friendfeed ile takip edin ve yorumlayın Twitter ile takip edin Vimeo ağımdaki videoları izleyin
Twitter'dım :)
Son Yorumlar
© 2011 Alptekin Bodur