
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.