Alışveriş SepetiShopping Cart

by Erik Reitanby Erik Reitan

Wingtip Toys örnek projesini indirin (C#) veya indirme E-kitabı (PDF)Download Wingtip Toys Sample Project (C#) or Download E-book (PDF)

Bu öğretici serisi, ASP.NET 4,5 ve Web için Microsoft Visual Studio Express 2013 kullanarak bir ASP.NET Web Forms uygulaması oluşturma hakkında temel bilgileri öğretir.This tutorial series will teach you the basics of building an ASP.NET Web Forms application using ASP.NET 4.5 and Microsoft Visual Studio Express 2013 for Web. Kaynak koduna sahip C# Visual Studio 2013 bir proje, bu öğretici serisine eşlik etmek için kullanılabilir.A Visual Studio 2013 project with C# source code is available to accompany this tutorial series.

Bu öğretici, Wingtip Toys örnek ASP.NET Web Forms uygulamasına bir alışveriş sepeti eklemek için gereken iş mantığını açıklamaktadır.This tutorial describes the business logic required to add a shopping cart to the Wingtip Toys sample ASP.NET Web Forms application. Bu öğretici, önceki öğreticide "veri öğelerini ve ayrıntılarını görüntüleme" ve Wingtip oyuncak mağaza öğreticisi serisinin bir parçası olarak oluşturulur.This tutorial builds on the previous tutorial "Display Data Items and Details" and is part of the Wingtip Toy Store tutorial series. Bu öğreticiyi tamamladığınızda, örnek uygulamanızın kullanıcıları alışveriş sepetindeki ürünleri ekleyebilir, kaldırabilir ve değiştirebilir.When you've completed this tutorial, the users of your sample app will be able to add, remove, and modify the products in their shopping cart.

Öğrenecekleriniz:What you'll learn:

  1. Web uygulaması için bir alışveriş sepeti oluşturma.How to create a shopping cart for the web application.
  2. Kullanıcıların alışveriş sepetine öğe eklemesini sağlama.How to enable users to add items to the shopping cart.
  3. Alışveriş sepeti ayrıntılarını göstermek için bir GridView denetimi ekleme.How to add a GridView control to display shopping cart details.
  4. Sipariş toplamını hesaplama ve görüntüleme.How to calculate and display the order total.
  5. Alışveriş sepetindeki öğeleri kaldırma ve güncelleştirme.How to remove and update items in the shopping cart.
  6. Bir alışveriş sepeti sayacı ekleme.How to include a shopping cart counter.

Bu öğreticideki kod özellikleri:Code features in this tutorial:

  1. Entity Framework Code FirstEntity Framework Code First
  2. Veri AçıklamalarıData Annotations
  3. Kesin tür belirtilmiş veri denetimleriStrongly typed data controls
  4. Model bağlamaModel binding

Alışveriş sepeti oluşturmaCreating a Shopping Cart

Bu öğretici serisinde daha önce, bir veritabanından ürün verilerini görüntülemek için sayfa ve kod eklediniz.Earlier in this tutorial series, you added pages and code to view product data from a database. Bu öğreticide, kullanıcıların satın alma ile ilgilenen ürünleri yönetmek için bir alışveriş sepeti oluşturacaksınız.In this tutorial, you'll create a shopping cart to manage the products that users are interested in buying. Kullanıcılar kayıtlı veya oturum açmış olmasalar bile alışveriş sepetine gözatabilecek ve bunlara öğe ekleyebilecektir.Users will be able to browse and add items to the shopping cart even if they are not registered or logged in. Alışveriş sepetini erişimini yönetmek için, Kullanıcı ilk kez alışveriş sepetine eriştiğinde bir genel benzersiz tanımlayıcı (GUID) kullanarak kullanıcılara benzersiz bir ID atayacaksınız.To manage shopping cart access, you will assign users a unique ID using a globally unique identifier (GUID) when the user accesses the shopping cart for the first time. Bu ID ASP.NET oturum durumunu kullanarak depolayacaksınız.You'll store this ID using the ASP.NET Session state.

Note

ASP.NET oturum durumu, Kullanıcı siteden ayrıldıktan sonra sona erecektir kullanıcıya özgü bilgileri depolamak için uygun bir yerdir.The ASP.NET Session state is a convenient place to store user-specific information which will expire after the user leaves the site. Oturum durumunun kötüye kullanımı daha büyük sitelerde performans etkilerine sahip olsa da, oturum durumunun hafif kullanımı, tanıtım amacıyla iyi bir şekilde çalışacaktır.While misuse of session state can have performance implications on larger sites, light use of session state works well for demonstration purposes. Wingtip Toys örnek projesi, oturum durumunun, siteyi barındıran Web sunucusunda işlem içinde depolandığı bir dış sağlayıcı olmadan nasıl kullanılacağını gösterir.The Wingtip Toys sample project shows how to use session state without an external provider, where session state is stored in-process on the web server hosting the site. Bir uygulamanın birden çok örneğini veya farklı sunuculardaki bir uygulamanın birden çok örneğini çalıştıran siteleri sağlayan daha büyük siteler için, Windows Azure önbellek hizmeti'ni kullanmayı düşünün.For larger sites that provide multiple instances of an application or for sites that run multiple instances of an application on different servers, consider using Windows Azure Cache Service. Bu önbellek hizmeti, Web sitesi dışında bir dağıtılmış önbelleğe alma hizmeti sağlar ve işlem içi oturum durumunu kullanma sorununu çözer.This Cache Service provides a distributed caching service that is external to the web site and solves the problem of using in-process session state. Daha fazla bilgi için bkz. Windows Azure Web siteleri ile ASP.NET oturum durumunu kullanma.For more information see, How to Use ASP.NET Session State with Windows Azure Web Sites.

Bir model sınıfı olarak Cartıtem eklemeAdd CartItem as a Model Class

Bu öğretici serisinde daha önce, modeller klasöründe Category ve Product sınıfları oluşturarak kategori ve ürün verilerinin şemasını tanımlamış olursunuz.Earlier in this tutorial series, you defined the schema for the category and product data by creating the Category and Product classes in the Models folder. Şimdi, alışveriş sepeti için şemayı tanımlamak üzere yeni bir sınıf ekleyin.Now, add a new class to define the schema for the shopping cart. Bu öğreticide daha sonra, CartItem tablosuna veri erişimini işlemek için bir sınıf ekleyeceksiniz.Later in this tutorial, you will add a class to handle data access to the CartItem table. Bu sınıf, alışveriş sepetindeki öğeleri eklemek, kaldırmak ve güncelleştirmek için iş mantığı sağlar.This class will provide the business logic to add, remove, and update items in the shopping cart.

  1. Modeller klasörüne sağ tıklayın ve yeni öğe> -Ekle ' yi seçin.Right-click the Models folder and select Add -> New Item.

    Alışveriş sepeti-yeni öğe

  2. Yeni öğe Ekle iletişim kutusu görüntülenir.The Add New Item dialog box is displayed. Koduseçin ve ardından sınıf' ı seçin.Select Code, and then select Class.

    Alışveriş sepeti-yeni öğe Ekle Iletişim kutusu

  3. Bu yeni sınıfı CartItem.csolarak adlandırın.Name this new class CartItem.cs.

  4. Ekle'yi tıklatın.Click Add.
    Yeni sınıf dosyası düzenleyicide görüntülenir.The new class file is displayed in the editor.

  5. Varsayılan kodu şu kodla değiştirin:Replace the default code with the following code:

    using System.ComponentModel.DataAnnotations;
    
    namespace WingtipToys.Models
    {
        public class CartItem
        {
            [Key]
            public string ItemId { get; set; }
    
            public string CartId { get; set; }
    
            public int Quantity { get; set; }
    
            public System.DateTime DateCreated { get; set; }
    
            public int ProductId { get; set; }
    
            public virtual Product Product { get; set; }
    
        }
    }
    

CartItem sınıfı, bir kullanıcının alışveriş sepetine eklediği her bir ürünü tanımlayan şemayı içerir.The CartItem class contains the schema that will define each product a user adds to the shopping cart. Bu sınıf, bu öğretici serisinde daha önce oluşturduğunuz diğer şema sınıflarına benzer.This class is similar to the other schema classes you created earlier in this tutorial series. Kurala göre Entity Framework Code First, CartItem tablosunun birincil anahtarının CartItemId veya IDolacağını bekler.By convention, Entity Framework Code First expects that the primary key for the CartItem table will be either CartItemId or ID. Ancak, kod, Data Annotation [Key] özniteliğini kullanarak varsayılan davranışı geçersiz kılar.However, the code overrides the default behavior by using the data annotation [Key] attribute. ItemId özelliğinin Key özniteliği, ItemID özelliğinin birincil anahtar olduğunu belirtir.The Key attribute of the ItemId property specifies that the ItemID property is the primary key.

CartId özelliği, satın alınacak öğeyle ilişkili kullanıcının ID belirtir.The CartId property specifies the ID of the user that is associated with the item to purchase. Kullanıcı alışveriş sepetine eriştiğinde bu kullanıcı ID oluşturmak için kod ekleyeceksiniz.You'll add code to create this user ID when the user accesses the shopping cart. Bu ID, bir ASP.NET oturum değişkeni olarak da depolanacak.This ID will also be stored as an ASP.NET Session variable.

Ürün bağlamını güncelleştirmeUpdate the Product Context

CartItem sınıfı eklemenin yanı sıra, varlık sınıflarını yöneten ve veritabanına veri erişimi sağlayan veritabanı bağlamı sınıfını güncelleştirmeniz gerekir.In addition to adding the CartItem class, you will need to update the database context class that manages the entity classes and that provides data access to the database. Bunu yapmak için, yeni oluşturulan CartItem modeli sınıfını ProductContext sınıfına ekleyeceksiniz.To do this, you will add the newly created CartItem model class to the ProductContext class.

  1. Çözüm Gezgini, modeller klasöründe ProductContext.cs dosyasını bulup açın.In Solution Explorer, find and open the ProductContext.cs file in the Models folder.

  2. Vurgulanan kodu ProductContext.cs dosyasına aşağıdaki şekilde ekleyin:Add the highlighted code to the ProductContext.cs file as follows:

    using System.Data.Entity;
     
    namespace WingtipToys.Models
    {
        public class ProductContext : DbContext
        {
            public ProductContext()
                : base("WingtipToys")
            {
            }
     
            public DbSet<Category> Categories { get; set; }
            public DbSet<Product> Products { get; set; }
            public DbSet<CartItem> ShoppingCartItems { get; set; }
        }
    }
    

Bu öğretici serisinde daha önce bahsedildiği gibi, ProductContext.cs dosyasındaki kod System.Data.Entity ad alanını ekleyerek Entity Framework tüm çekirdek işlevlerine erişebilirsiniz.As mentioned previously in this tutorial series, the code in the ProductContext.cs file adds the System.Data.Entity namespace so that you have access to all the core functionality of the Entity Framework. Bu işlevsellik, türü kesin belirlenmiş nesnelerle çalışarak verileri sorgulama, ekleme, güncelleştirme ve silme özelliğini içerir.This functionality includes the capability to query, insert, update, and delete data by working with strongly typed objects. ProductContext sınıfı, yeni eklenen CartItem model sınıfına erişim ekler.The ProductContext class adds access to the newly added CartItem model class.

Alışveriş sepetini Iş mantığını yönetmeManaging the Shopping Cart Business Logic

Sonra, ShoppingCart sınıfını yeni bir mantıksal klasörde oluşturacaksınız.Next, you'll create the ShoppingCart class in a new Logic folder. ShoppingCart sınıfı CartItem tabloya veri erişimini işler.The ShoppingCart class handles data access to the CartItem table. Bu sınıf, alışveriş sepetindeki öğeleri eklemek, kaldırmak ve güncelleştirmek için iş mantığını da içerir.The class will also include the business logic to add, remove, and update items in the shopping cart.

Ekleyeceğiniz alışveriş sepeti mantığı aşağıdaki eylemleri yönetmek için gereken işlevselliği içerir:The shopping cart logic that you will add will contain the functionality to manage the following actions:

  1. Alışveriş sepetine öğe eklemeAdding items to the shopping cart
  2. Alışveriş sepetinden öğeleri kaldırmaRemoving items from the shopping cart
  3. Alışveriş sepeti KIMLIĞINI almaGetting the shopping cart ID
  4. Alışveriş sepetinden öğe almaRetrieving items from the shopping cart
  5. Tüm alışveriş sepeti öğelerinin miktarını Toplam olarak almaTotaling the amount of all the shopping cart items
  6. Alışveriş sepeti verilerini güncelleştirmeUpdating the shopping cart data

Alışveriş sepeti verilerine erişmek için bir alışveriş sepeti sayfası (ShoppingCart. aspx) ve alışveriş sepeti sınıfı birlikte kullanılacaktır.A shopping cart page (ShoppingCart.aspx) and the shopping cart class will be used together to access shopping cart data. Alışveriş sepeti sayfası, kullanıcının alışveriş sepetine eklediği tüm öğeleri görüntüler.The shopping cart page will display all the items the user adds to the shopping cart. Alışveriş sepeti sayfasının ve sınıfının yanı sıra, alışveriş sepetine ürün eklemek için bir sayfa (AddToCart. aspx) oluşturacaksınız.Besides the shopping cart page and class, you'll create a page (AddToCart.aspx) to add products to the shopping cart. Ayrıca, ProductList. aspx sayfasına ve AddToCart. aspx sayfasına bir bağlantı sağlayacak olan ProductDetails. aspx sayfasına kod ekleyeceksiniz. böylece, kullanıcının alışveriş sepetine ürün ekleyebilmesi gerekir.You will also add code to the ProductList.aspx page and the ProductDetails.aspx page that will provide a link to the AddToCart.aspx page, so that the user can add products to the shopping cart.

Aşağıdaki diyagramda, Kullanıcı alışveriş sepetine bir ürün eklediğinde oluşan temel işlem gösterilmektedir.The following diagram shows the basic process that occurs when the user adds a product to the shopping cart.

Alışveriş sepeti-alışveriş sepetine ekleme

Kullanıcı ProductList. aspx sayfasında veya ProductDetails. aspx sayfasında sepet Ekle bağlantısına tıkladığında, uygulama AddToCart. aspx sayfasına ve ardından otomatik olarak ShoppingCart. aspx sayfasına gider.When the user clicks the Add To Cart link on either the ProductList.aspx page or the ProductDetails.aspx page, the application will navigate to the AddToCart.aspx page and then automatically to the ShoppingCart.aspx page. AddToCart. aspx sayfası, ShoppingCart sınıfında bir yöntemi çağırarak, select ürünü alışveriş sepetine ekler.The AddToCart.aspx page will add the select product to the shopping cart by calling a method in the ShoppingCart class. ShoppingCart. aspx sayfasında, alışveriş sepetine eklenmiş ürünler görüntülenir.The ShoppingCart.aspx page will display the products that have been added to the shopping cart.

Alışveriş sepeti sınıfı oluşturmaCreating the Shopping Cart Class

ShoppingCart sınıfı uygulamadaki ayrı bir klasöre eklenir, böylece model (modeller klasörü), sayfalar (kök klasörü) ve Logic (Logic Folder) arasında net bir ayrım olur.The ShoppingCart class will be added to a separate folder in the application so that there will be a clear distinction between the model (Models folder), the pages (root folder) and the logic (Logic folder).

  1. Çözüm Gezgini, wingtiptoysprojesine sağ tıklayın ve Yeni klasör>-Ekle ' yi seçin.In Solution Explorer, right-click the WingtipToysproject and select Add->New Folder. Yeni klasör mantığınıadlandırın.Name the new folder Logic.

  2. Logic klasörüne sağ tıklayın ve ardından yeni öğe> -Ekle ' yi seçin.Right-click the Logic folder and then select Add -> New Item.

  3. ShoppingCartActions.csadlı yeni bir sınıf dosyası ekleyin.Add a new class file named ShoppingCartActions.cs.

  4. Varsayılan kodu şu kodla değiştirin:Replace the default code with the following code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using WingtipToys.Models;
    
    namespace WingtipToys.Logic
    {
      public class ShoppingCartActions : IDisposable
      {
        public string ShoppingCartId { get; set; }
    
        private ProductContext _db = new ProductContext();
    
        public const string CartSessionKey = "CartId";
    
        public void AddToCart(int id)
        {
          // Retrieve the product from the database.           
          ShoppingCartId = GetCartId();
    
          var cartItem = _db.ShoppingCartItems.SingleOrDefault(
              c => c.CartId == ShoppingCartId
              && c.ProductId == id);
          if (cartItem == null)
          {
            // Create a new cart item if no cart item exists.                 
            cartItem = new CartItem
            {
              ItemId = Guid.NewGuid().ToString(),
              ProductId = id,
              CartId = ShoppingCartId,
              Product = _db.Products.SingleOrDefault(
               p => p.ProductID == id),
              Quantity = 1,
              DateCreated = DateTime.Now
            };
    
            _db.ShoppingCartItems.Add(cartItem);
          }
          else
          {
            // If the item does exist in the cart,                  
            // then add one to the quantity.                 
            cartItem.Quantity++;
          }
          _db.SaveChanges();
        }
    
        public void Dispose()
        {
          if (_db != null)
          {
            _db.Dispose();
            _db = null;
          }
        }
    
        public string GetCartId()
        {
          if (HttpContext.Current.Session[CartSessionKey] == null)
          {
            if (!string.IsNullOrWhiteSpace(HttpContext.Current.User.Identity.Name))
            {
              HttpContext.Current.Session[CartSessionKey] = HttpContext.Current.User.Identity.Name;
            }
            else
            {
              // Generate a new random GUID using System.Guid class.     
              Guid tempCartId = Guid.NewGuid();
              HttpContext.Current.Session[CartSessionKey] = tempCartId.ToString();
            }
          }
          return HttpContext.Current.Session[CartSessionKey].ToString();
        }
    
        public List<CartItem> GetCartItems()
        {
          ShoppingCartId = GetCartId();
    
          return _db.ShoppingCartItems.Where(
              c => c.CartId == ShoppingCartId).ToList();
        }
      }
    }
    

AddToCart yöntemi, bireysel ürünlerin ürün IDgöre alışveriş sepetine dahil edilmesini sağlar.The AddToCart method enables individual products to be included in the shopping cart based on the product ID. Ürün sepete eklenir veya sepet zaten bu ürün için bir öğe içeriyorsa, miktar artırılır.The product is added to the cart, or if the cart already contains an item for that product, the quantity is incremented.

GetCartId yöntemi kullanıcı için sepet ID döndürür.The GetCartId method returns the cart ID for the user. Sepet ID, bir kullanıcının alışveriş sepetindeki öğeleri izlemek için kullanılır.The cart ID is used to track the items that a user has in their shopping cart. Kullanıcının mevcut bir sepet IDyoksa, bu ID yeni bir sepet oluşturulur.If the user does not have an existing cart ID, a new cart ID is created for them. Kullanıcı kayıtlı bir kullanıcı olarak oturum açmışsa, sepet ID Kullanıcı adına ayarlanır.If the user is signed in as a registered user, the cart ID is set to their user name. Ancak, Kullanıcı oturum açmamışsa, sepet ID benzersiz bir değer (bir GUID) olarak ayarlanır.However, if the user is not signed in, the cart ID is set to a unique value (a GUID). Bir GUID, oturum temelinde her bir kullanıcı için yalnızca bir sepet oluşturulmasını sağlar.A GUID ensures that only one cart is created for each user, based on session.

GetCartItems yöntemi, Kullanıcı için alışveriş sepeti öğelerinin bir listesini döndürür.The GetCartItems method returns a list of shopping cart items for the user. Bu öğreticide daha sonra, GetCartItems yöntemi kullanılarak alışveriş sepetindeki sepet öğelerini görüntülemek için model bağlamanın kullanıldığını görürsünüz.Later in this tutorial, you will see that model binding is used to display the cart items in the shopping cart using the GetCartItems method.

Sepetin ekleme Işlevini oluşturmaCreating the Add-To-Cart Functionality

Daha önce belirtildiği gibi, kullanıcının alışveriş sepetine yeni ürünler eklemek için kullanılacak AddToCart. aspx adlı bir işleme sayfası oluşturacaksınız.As mentioned earlier, you will create a processing page named AddToCart.aspx that will be used to add new products to the shopping cart of the user. Bu sayfa, yeni oluşturduğunuz ShoppingCart sınıfında AddToCart yöntemini çağırır.This page will call the AddToCart method in the ShoppingCart class that you just created. AddToCart. aspx sayfası bir ürün ID geçtiğini bekler.The AddToCart.aspx page will expect that a product ID is passed to it. Bu ürün ID, ShoppingCart sınıfında AddToCart yöntemi çağrılırken kullanılacaktır.This product ID will be used when calling the AddToCart method in the ShoppingCart class.

Note

Sayfa Kullanıcı arabirimi (AddToCart. aspx) değil, Bu sayfa için arka plan kodunu (AddToCart.aspx.cs) değiştiriyorsunuz.You will be modifying the code-behind (AddToCart.aspx.cs) for this page, not the page UI (AddToCart.aspx).

Add-cart işlevini oluşturmak için:To create the Add-To-Cart functionality:

  1. Çözüm Gezgini, wingtiptoysprojesine sağ tıklayın, Yeni öğe> -Ekle ' ye tıklayın.In Solution Explorer, right-click the WingtipToysproject, click Add -> New Item.
    Yeni öğe Ekle iletişim kutusu görüntülenir.The Add New Item dialog box is displayed.

  2. AddToCart. aspxadlı uygulamaya standart yeni bir sayfa (Web formu) ekleyin.Add a standard new page (Web Form) to the application named AddToCart.aspx.

    Alışveriş sepeti-Web formu ekleme

  3. Çözüm Gezgini, AddToCart. aspx sayfasına sağ tıklayıp kodu görüntüle' ye tıklayın.In Solution Explorer, right-click the AddToCart.aspx page and then click View Code. AddToCart.aspx.cs arka plan kod dosyası düzenleyicide açılır.The AddToCart.aspx.cs code-behind file is opened in the editor.

  4. AddToCart.aspx.cs kodundaki mevcut kodu aşağıdaki kodla değiştirin:Replace the existing code in the AddToCart.aspx.cs code-behind with the following:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Diagnostics;
    using WingtipToys.Logic;
    
    namespace WingtipToys
    {
      public partial class AddToCart : System.Web.UI.Page
      {
        protected void Page_Load(object sender, EventArgs e)
        {
          string rawId = Request.QueryString["ProductID"];
          int productId;
          if (!String.IsNullOrEmpty(rawId) && int.TryParse(rawId, out productId))
          {
            using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())
            {
              usersShoppingCart.AddToCart(Convert.ToInt16(rawId));
            }
    
          }
          else
          {
            Debug.Fail("ERROR : We should never get to AddToCart.aspx without a ProductId.");
            throw new Exception("ERROR : It is illegal to load AddToCart.aspx without setting a ProductId.");
          }
          Response.Redirect("ShoppingCart.aspx");
        }
      }
    }
    

AddToCart. aspx sayfası yüklendiğinde, ürün ID sorgu dizesinden alınır.When the AddToCart.aspx page is loaded, the product ID is retrieved from the query string. Ardından, alışveriş sepeti sınıfının bir örneği oluşturulur ve bu öğreticide daha önce eklediğiniz AddToCart yöntemini çağırmak için kullanılır.Next, an instance of the shopping cart class is created and used to call the AddToCart method that you added earlier in this tutorial. ShoppingCartActions.cs dosyasında bulunan AddToCart yöntemi, seçili ürünü alışveriş sepetine ekleme veya seçili ürünün ürün miktarını artırma mantığını içerir.The AddToCart method, contained in the ShoppingCartActions.cs file, includes the logic to add the selected product to the shopping cart or increment the product quantity of the selected product. Ürün, alışveriş sepetine eklenmemişse, ürün veritabanının CartItem tablosuna eklenir.If the product hasn't been added to the shopping cart, the product is added to the CartItem table of the database. Ürün, alışveriş sepetine zaten eklendiyse ve Kullanıcı aynı ürüne ek bir öğe eklerse, CartItem tablosunda ürün miktarı artırılır.If the product has already been added to the shopping cart and the user adds an additional item of the same product, the product quantity is incremented in the CartItem table. Son olarak, sayfa, kullanıcının sepetteki öğelerin güncelleştirilmiş bir listesini gördüğü bir sonraki adımda ekleyeceğiniz ShoppingCart. aspx sayfasına yeniden yönlendirilir.Finally, the page redirects back to the ShoppingCart.aspx page that you'll add in the next step, where the user sees an updated list of items in the cart.

Daha önce belirtildiği gibi, bir Kullanıcı ID, belirli bir kullanıcıyla ilişkili ürünleri belirlemek için kullanılır.As previously mentioned, a user ID is used to identify the products that are associated with a specific user. Bu ID, Kullanıcı alışveriş sepetine her ürün eklediğinde CartItem tablosundaki bir satıra eklenir.This ID is added to a row in the CartItem table each time the user adds a product to the shopping cart.

Alışveriş sepeti Kullanıcı arabirimi oluşturmaCreating the Shopping Cart UI

ShoppingCart. aspx sayfası, kullanıcının kendi alışveriş sepetine eklediği ürünleri görüntüler.The ShoppingCart.aspx page will display the products that the user has added to their shopping cart. Ayrıca, alışveriş sepetindeki öğeleri ekleme, kaldırma ve güncelleştirme olanağı da sağlar.It will also provide the ability to add, remove and update items in the shopping cart.

  1. Çözüm Gezgini, wingtiptoys' a sağ tıklayın, Yeni öğe> -Ekle ' ye tıklayın.In Solution Explorer, right-click WingtipToys, click Add -> New Item.
    Yeni öğe Ekle iletişim kutusu görüntülenir.The Add New Item dialog box is displayed.

  2. Ana sayfa kullanarak Web formu' nu seçerek ana sayfa içeren yeni bir sayfa (Web formu) ekleyin.Add a new page (Web Form) that includes a master page by selecting Web Form using Master Page. Yeni sayfayı ShoppingCart. aspxolarak adlandırın.Name the new page ShoppingCart.aspx.

  3. Ana sayfayı yeni oluşturulan . aspx sayfasına eklemek için site. Master ' u seçin.Select Site.Master to attach the master page to the newly created .aspx page.

  4. ShoppingCart. aspx sayfasında, varolan biçimlendirmeyi aşağıdaki biçimlendirme ile değiştirin:In the ShoppingCart.aspx page, replace the existing markup with the following markup:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ShoppingCart.aspx.cs" Inherits="WingtipToys.ShoppingCart" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
        <div id="ShoppingCartTitle" runat="server" class="ContentHead"><h1>Shopping Cart</h1></div>
        <asp:GridView ID="CartList" runat="server" AutoGenerateColumns="False" ShowFooter="True" GridLines="Vertical" CellPadding="4"
            ItemType="WingtipToys.Models.CartItem" SelectMethod="GetShoppingCartItems" 
            CssClass="table table-striped table-bordered" >   
            <Columns>
            <asp:BoundField DataField="ProductID" HeaderText="ID" SortExpression="ProductID" />        
            <asp:BoundField DataField="Product.ProductName" HeaderText="Name" />        
            <asp:BoundField DataField="Product.UnitPrice" HeaderText="Price (each)" DataFormatString="{0:c}"/>     
            <asp:TemplateField   HeaderText="Quantity">            
                    <ItemTemplate>
                        <asp:TextBox ID="PurchaseQuantity" Width="40" runat="server" Text="<%#: Item.Quantity %>"></asp:TextBox> 
                    </ItemTemplate>        
            </asp:TemplateField>    
            <asp:TemplateField HeaderText="Item Total">            
                    <ItemTemplate>
                        <%#: String.Format("{0:c}", ((Convert.ToDouble(Item.Quantity)) *  Convert.ToDouble(Item.Product.UnitPrice)))%>
                    </ItemTemplate>        
            </asp:TemplateField> 
            <asp:TemplateField HeaderText="Remove Item">            
                    <ItemTemplate>
                        <asp:CheckBox id="Remove" runat="server"></asp:CheckBox>
                    </ItemTemplate>        
            </asp:TemplateField>    
            </Columns>    
        </asp:GridView>
        <div>
            <p></p>
            <strong>
                <asp:Label ID="LabelTotalText" runat="server" Text="Order Total: "></asp:Label>
                <asp:Label ID="lblTotal" runat="server" EnableViewState="false"></asp:Label>
            </strong> 
        </div>
        <br />
    </asp:Content>
    

ShoppingCart. aspx sayfası, CartListadlı bir GridView denetimi içerir.The ShoppingCart.aspx page includes a GridView control named CartList. Bu denetim, alışveriş sepeti verilerini veritabanından GridView denetimine bağlamak için model bağlamayı kullanır.This control uses model binding to bind the shopping cart data from the database to the GridView control. GridView denetiminin ItemType özelliğini ayarladığınızda, Item veri bağlama ifadesi denetimin biçimlendirmesinde kullanılabilir ve denetim kesin bir şekilde türdedir.When you set the ItemType property of the GridView control, the data-binding expression Item is available in the markup of the control and the control becomes strongly typed. Bu öğretici serisinde daha önce bahsedildiği gibi, IntelliSense kullanarak Item nesnesinin ayrıntılarını seçebilirsiniz.As mentioned earlier in this tutorial series, you can select details of the Item object using IntelliSense. Veri seçmek üzere model bağlamayı kullanmak üzere bir veri denetimi yapılandırmak için denetimin SelectMethod özelliğini ayarlarsınız.To configure a data control to use model binding to select data, you set the SelectMethod property of the control. Yukarıdaki biçimlendirmede SelectMethod, bir CartItem nesnelerinin listesini döndüren Getshoppingcartıtems metodunu kullanacak şekilde ayarlarsınız.In the markup above, you set the SelectMethod to use the GetShoppingCartItems method which returns a list of CartItem objects. GridView veri denetimi, yöntemi sayfa yaşam döngüsünde uygun zamanda çağırır ve döndürülen verileri otomatik olarak bağlar.The GridView data control calls the method at the appropriate time in the page life cycle and automatically binds the returned data. GetShoppingCartItems yöntemi yine de eklenmelidir.The GetShoppingCartItems method must still be added.

Alışveriş sepeti öğelerini almaRetrieving the Shopping Cart Items

Ardından, alışveriş sepeti Kullanıcı arabirimini almak ve doldurmak için ShoppingCart.aspx.cs arka planda kod eklersiniz.Next, you add code to the ShoppingCart.aspx.cs code-behind to retrieve and populate the Shopping Cart UI.

  1. Çözüm Gezgini, ShoppingCart. aspx sayfasına sağ tıklayın ve sonra kodu görüntüle' ye tıklayın.In Solution Explorer, right-click the ShoppingCart.aspx page and then click View Code. ShoppingCart.aspx.cs arka plan kod dosyası düzenleyicide açılır.The ShoppingCart.aspx.cs code-behind file is opened in the editor.

  2. Mevcut kodu şu kodla değiştirin:Replace the existing code with the following:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using WingtipToys.Models;
    using WingtipToys.Logic;
    
    namespace WingtipToys
    {
      public partial class ShoppingCart : System.Web.UI.Page
      {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        public List<CartItem> GetShoppingCartItems()
        {
          ShoppingCartActions actions = new ShoppingCartActions();
          return actions.GetCartItems();
        }
      }
    }
    

Yukarıda belirtildiği gibi, GridView Data Control, GetShoppingCartItems yöntemini sayfa yaşam döngüsünde uygun zamanda çağırır ve döndürülen verileri otomatik olarak bağlar.As mentioned above, the GridView data control calls the GetShoppingCartItems method at the appropriate time in the page life cycle and automatically binds the returned data. GetShoppingCartItems yöntemi ShoppingCartActions nesnesinin bir örneğini oluşturur.The GetShoppingCartItems method creates an instance of the ShoppingCartActions object. Daha sonra kod, GetCartItems yöntemini çağırarak sepetteki öğeleri döndürmek için bu örneği kullanır.Then, the code uses that instance to return the items in the cart by calling the GetCartItems method.

Alışveriş sepetine ürün eklemeAdding Products to the Shopping Cart

ProductList. aspx veya ProductDetails. aspx sayfası görüntülendiğinde, Kullanıcı bir bağlantı kullanarak ürünü alışveriş sepetine ekleyebilecektir.When either the ProductList.aspx or the ProductDetails.aspx page is displayed, the user will be able to add the product to the shopping cart using a link. Bağlantıyı tıkladıklarında, uygulama AddToCart. aspxadlı işleme sayfasına gider.When they click the link, the application navigates to the processing page named AddToCart.aspx. AddToCart. aspx sayfası, bu öğreticide daha önce eklediğiniz ShoppingCart sınıfında AddToCart yöntemini çağırır.The AddToCart.aspx page will call the AddToCart method in the ShoppingCart class that you added earlier in this tutorial.

Şimdi, ProductList. aspx sayfasına ve ProductDetails. aspx sayfasına bir sepet Ekle bağlantısı ekleyeceksiniz.Now, you'll add an Add to Cart link to both the ProductList.aspx page and the ProductDetails.aspx page. Bu bağlantı, veritabanından alınan ürün ID içerecektir.This link will include the product ID that is retrieved from the database.

  1. Çözüm Gezgini, ProductList. aspxadlı sayfayı bulup açın.In Solution Explorer, find and open the page named ProductList.aspx.

  2. Tüm sayfanın aşağıdaki gibi görünmesi için, sarıya vurgulanan biçimlendirmeyi ProductList. aspx sayfasına ekleyin:Add the markup highlighted in yellow to the ProductList.aspx page so that the entire page appears as follows:

    <%@ Page Title="Products" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" 
             CodeBehind="ProductList.aspx.cs" Inherits="WingtipToys.ProductList" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
        <section>
            <div>
                <hgroup>
                    <h2><%: Page.Title %></h2>
                </hgroup>
    
                <asp:ListView ID="productList" runat="server" 
                    DataKeyNames="ProductID" GroupItemCount="4"
                    ItemType="WingtipToys.Models.Product" SelectMethod="GetProducts">
                    <EmptyDataTemplate>
                        <table runat="server">
                            <tr>
                                <td>No data was returned.</td>
                            </tr>
                        </table>
                    </EmptyDataTemplate>
                    <EmptyItemTemplate>
                        <td runat="server" />
                    </EmptyItemTemplate>
                    <GroupTemplate>
                        <tr id="itemPlaceholderContainer" runat="server">
                            <td id="itemPlaceholder" runat="server"></td>
                        </tr>
                    </GroupTemplate>
                    <ItemTemplate>
                        <td runat="server">
                            <table>
                                <tr>
                                    <td>
                                        <a href="ProductDetails.aspx?productID=<%#:Item.ProductID%>">
                                            <img src="/Catalog/Images/Thumbs/<%#:Item.ImagePath%>"
                                                width="100" height="75" style="border: solid" /></a>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <a href="ProductDetails.aspx?productID=<%#:Item.ProductID%>">
                                            <span>
                                                <%#:Item.ProductName%>
                                            </span>
                                        </a>
                                        <br />
                                        <span>
                                            <b>Price: </b><%#:String.Format("{0:c}", Item.UnitPrice)%>
                                        </span>
                                        <br />
                                        <a href="/AddToCart.aspx?productID=<%#:Item.ProductID %>">               
                                            <span class="ProductListItem">
                                                <b>Add To Cart<b>
                                            </span>           
                                        </a>
                                    </td>
                                </tr>
                                <tr>
                                    <td>&nbsp;</td>
                                </tr>
                            </table>
                            </p>
                        </td>
                    </ItemTemplate>
                    <LayoutTemplate>
                        <table runat="server" style="width:100%;">
                            <tbody>
                                <tr runat="server">
                                    <td runat="server">
                                        <table id="groupPlaceholderContainer" runat="server" style="width:100%">
                                            <tr id="groupPlaceholder" runat="server"></tr>
                                        </table>
                                    </td>
                                </tr>
                                <tr runat="server">
                                    <td runat="server"></td>
                                </tr>
                                <tr></tr>
                            </tbody>
                        </table>
                    </LayoutTemplate>
                </asp:ListView>
            </div>
        </section>
    </asp:Content>
    

Alışveriş sepetini test etmeTesting the Shopping Cart

Satın alma sepetini ürün eklemeyi öğrenmek için uygulamayı çalıştırın.Run the application to see how you add products to the shopping cart.

  1. Uygulamayı çalıştırmak için F5'e basın.Press F5 to run the application.
    Proje veritabanını yeniden oluşturduktan sonra, tarayıcı açılır ve varsayılan. aspx sayfasını gösterir.After the project recreates the database, the browser will open and show the Default.aspx page.

  2. Kategori gezinti menüsünde otomobiller ' i seçin.Select Cars from the category navigation menu.
    ProductList. aspx sayfası yalnızca "otomobiller" kategorisinde bulunan ürünlerin gösterildiği görüntülenir.The ProductList.aspx page is displayed showing only products included in the "Cars" category.

    Alışveriş sepeti-otomobiller

  3. Listelenen ilk ürünün yanındaki sepet Ekle bağlantısına tıklayın (dönüştürülebilir otomobil).Click the Add to Cart link next to the first product listed (the convertible car).
    Alışveriş sepetinizdeki seçimi gösteren ShoppingCart. aspx sayfası görüntülenir.The ShoppingCart.aspx page is displayed, showing the selection in your shopping cart.

    Alışveriş sepeti-sepet

  4. Kategori gezinti menüsünden düzlemler ' i seçerek ek ürünleri görüntüleyin.View additional products by selecting Planes from the category navigation menu.

  5. Listelenen ilk ürünün yanındaki sepet Ekle bağlantısına tıklayın.Click the Add to Cart link next to the first product listed.
    ShoppingCart. aspx sayfası ek öğeyle birlikte görüntülenir.The ShoppingCart.aspx page is displayed with the additional item.

  6. Tarayıcıyı kapatın.Close the browser.

Sipariş toplamını hesaplama ve görüntülemeCalculating and Displaying the Order Total

Alışveriş sepetine ürün eklemeye ek olarak, ShoppingCart sınıfına bir GetTotal yöntemi ekleyecek ve alışveriş sepeti sayfasında toplam sipariş miktarını görüntüleyecek olursunuz.In addition to adding products to the shopping cart, you will add a GetTotal method to the ShoppingCart class and display the total order amount in the shopping cart page.

  1. Çözüm Gezgini' de, ShoppingCartActions.cs dosyasını Logic klasöründe açın.In Solution Explorer, open the ShoppingCartActions.cs file in the Logic folder.

  2. Aşağıdaki GetTotal yöntemini sarı olarak vurgulanmış şekilde ShoppingCart sınıfına ekleyin:Add the following GetTotal method highlighted in yellow to the ShoppingCart class, so that the class appears as follows:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using WingtipToys.Models;
    
    namespace WingtipToys.Logic
    {
      public class ShoppingCartActions : IDisposable
      {
        public string ShoppingCartId { get; set; }
    
        private ProductContext _db = new ProductContext();
    
        public const string CartSessionKey = "CartId";
    
        public void AddToCart(int id)
        {
          // Retrieve the product from the database.           
          ShoppingCartId = GetCartId();
    
          var cartItem = _db.ShoppingCartItems.SingleOrDefault(
              c => c.CartId == ShoppingCartId
              && c.ProductId == id);
          if (cartItem == null)
          {
            // Create a new cart item if no cart item exists.                 
            cartItem = new CartItem
            {
              ItemId = Guid.NewGuid().ToString(),
              ProductId = id,
              CartId = ShoppingCartId,
              Product = _db.Products.SingleOrDefault(
               p => p.ProductID == id),
              Quantity = 1,
              DateCreated = DateTime.Now
            };
    
            _db.ShoppingCartItems.Add(cartItem);
          }
          else
          {
            // If the item does exist in the cart,                  
            // then add one to the quantity.                 
            cartItem.Quantity++;
          }
          _db.SaveChanges();
        }
    
        public void Dispose()
        {
          if (_db != null)
          {
            _db.Dispose();
            _db = null;
          }
        }
    
        public string GetCartId()
        {
          if (HttpContext.Current.Session[CartSessionKey] == null)
          {
            if (!string.IsNullOrWhiteSpace(HttpContext.Current.User.Identity.Name))
            {
              HttpContext.Current.Session[CartSessionKey] = HttpContext.Current.User.Identity.Name;
            }
            else
            {
              // Generate a new random GUID using System.Guid class.     
              Guid tempCartId = Guid.NewGuid();
              HttpContext.Current.Session[CartSessionKey] = tempCartId.ToString();
            }
          }
          return HttpContext.Current.Session[CartSessionKey].ToString();
        }
    
        public List<CartItem> GetCartItems()
        {
          ShoppingCartId = GetCartId();
    
          return _db.ShoppingCartItems.Where(
              c => c.CartId == ShoppingCartId).ToList();
        }
    
        public decimal GetTotal()
        {
          ShoppingCartId = GetCartId();
          // Multiply product price by quantity of that product to get        
          // the current price for each of those products in the cart.  
          // Sum all product price totals to get the cart total.   
          decimal? total = decimal.Zero;
          total = (decimal?)(from cartItems in _db.ShoppingCartItems
                             where cartItems.CartId == ShoppingCartId
                             select (int?)cartItems.Quantity *
                             cartItems.Product.UnitPrice).Sum();
          return total ?? decimal.Zero;
        }
      }
    }
    

İlk olarak, GetTotal yöntemi kullanıcı için alışveriş sepetinin KIMLIĞINI alır.First, the GetTotal method gets the ID of the shopping cart for the user. Daha sonra yöntemi, sepette listelenen her ürün için ürün fiyatını ürün miktarına göre çarparak sepet toplamı alır.Then the method gets the cart total by multiplying the product price by the product quantity for each product listed in the cart.

Note

Yukarıdaki kod null yapılabilir "int?" türünü kullanır.The above code uses the nullable type "int?". Null yapılabilir türler, temel alınan bir türün tüm değerlerini ve aynı zamanda null değer olarak temsil edebilir.Nullable types can represent all the values of an underlying type, and also as a null value. Daha fazla bilgi için bkz. Nullable türler kullanma.For more information see, Using Nullable Types.

Alışveriş sepeti görüntüsünü değiştirmeModify the Shopping Cart Display

Daha sonra, GetTotal yöntemini çağırmak üzere ShoppingCart. aspx sayfasının kodunu değiştireceksiniz ve sayfa yüklendiğinde bu toplamı ShoppingCart. aspx sayfasında görüntüleyebilirsiniz.Next you'll modify the code for the ShoppingCart.aspx page to call the GetTotal method and display that total on the ShoppingCart.aspx page when the page loads.

  1. Çözüm Gezgini, ShoppingCart. aspx sayfasına sağ tıklayın ve kodu görüntüle' yi seçin.In Solution Explorer, right-click the ShoppingCart.aspx page and select View Code.

  2. ShoppingCart.aspx.cs dosyasında, aşağıdaki kodu sarı renkle ekleyerek Page_Load işleyicisini güncelleştirin:In the ShoppingCart.aspx.cs file, update the Page_Load handler by adding the following code highlighted in yellow:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using WingtipToys.Models;
    using WingtipToys.Logic;
    
    namespace WingtipToys
    {
      public partial class ShoppingCart : System.Web.UI.Page
      {
        protected void Page_Load(object sender, EventArgs e)
        {
          using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())
          {
            decimal cartTotal = 0;
            cartTotal = usersShoppingCart.GetTotal();
            if (cartTotal > 0)
            {
              // Display Total.
              lblTotal.Text = String.Format("{0:c}", cartTotal);
            }
            else
            {
              LabelTotalText.Text = "";
              lblTotal.Text = "";
              ShoppingCartTitle.InnerText = "Shopping Cart is Empty";
            }
          }
        }
    
        public List<CartItem> GetShoppingCartItems()
        {
          ShoppingCartActions actions = new ShoppingCartActions();
          return actions.GetCartItems();
        }
      }
    }
    

ShoppingCart. aspx sayfası yüklendiğinde, alışveriş sepeti nesnesini yükler ve ardından ShoppingCart sınıfının GetTotal yöntemini çağırarak alışveriş sepeti toplamı alınır.When the ShoppingCart.aspx page loads, it loads the shopping cart object and then retrieves the shopping cart total by calling the GetTotal method of the ShoppingCart class. Alışveriş sepeti boşsa, bu etkiye yönelik bir ileti görüntülenir.If the shopping cart is empty, a message to that effect is displayed.

Alışveriş sepetini toplam test etmeTesting the Shopping Cart Total

Yalnızca bir ürünü alışveriş sepetine nasıl ekleyekullanabileceğinizi görmek için uygulamayı şimdi çalıştırın, ancak alışveriş sepetini toplam ' u görebilirsiniz.Run the application now to see how you can not only add a product to the shopping cart, but you can see the shopping cart total.

  1. Uygulamayı çalıştırmak için F5'e basın.Press F5 to run the application.
    Tarayıcı açılır ve default. aspx sayfasını gösterir.The browser will open and show the Default.aspx page.

  2. Kategori gezinti menüsünde otomobiller ' i seçin.Select Cars from the category navigation menu.

  3. İlk ürünün yanındaki sepet Ekle bağlantısına tıklayın.Click the Add To Cart link next to the first product.
    ShoppingCart. aspx sayfası, sipariş toplamla birlikte görüntülenir.The ShoppingCart.aspx page is displayed with the order total.

    Alışveriş sepeti-sepet toplamı

  4. Sepetin bazı ürünlerini (örneğin, bir düzlemi) ekleyin.Add some other products (for example, a plane) to the cart.

  5. ShoppingCart. aspx sayfası, eklediğiniz tüm ürünlerin güncelleştirilmiş toplamı ile görüntülenir.The ShoppingCart.aspx page is displayed with an updated total for all the products you've added.

    Alışveriş sepeti-birden çok ürün

  6. Tarayıcı penceresini kapatarak çalışan uygulamayı durdurun.Stop the running app by closing the browser window.

Alışveriş sepetine güncelleştirme ve kullanıma alma düğmeleri eklemeAdding Update and Checkout Buttons to the Shopping Cart

Kullanıcıların alışveriş sepetini değiştirmesine izin vermek için, alışveriş sepeti sayfasına bir güncelleştirme düğmesi ve bir kullanıma alma düğmesi ekleyeceksiniz.To allow the users to modify the shopping cart, you'll add an Update button and a Checkout button to the shopping cart page. Bu öğretici serisinde daha sonra kullanıma alma düğmesi kullanılmaz.The Checkout button is not used until later in this tutorial series.

  1. Çözüm Gezgini' de, Web uygulaması projesinin kökündeki ShoppingCart. aspx sayfasını açın.In Solution Explorer, open the ShoppingCart.aspx page in the root of the web application project.

  2. Güncelleştirme düğmesini ve kullanıma al düğmesini ShoppingCart. aspx sayfasına eklemek için, aşağıdaki kodda gösterildiği gibi, sarı renkle vurgulanmış biçimlendirmeyi varolan biçimlendirmeye ekleyin:To add the Update button and the Checkout button to the ShoppingCart.aspx page, add the markup highlighted in yellow to the existing markup, as shown in the following code:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ShoppingCart.aspx.cs" Inherits="WingtipToys.ShoppingCart" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
        <div id="ShoppingCartTitle" runat="server" class="ContentHead"><h1>Shopping Cart</h1></div>
        <asp:GridView ID="CartList" runat="server" AutoGenerateColumns="False" ShowFooter="True" GridLines="Vertical" CellPadding="4"
            ItemType="WingtipToys.Models.CartItem" SelectMethod="GetShoppingCartItems"  
            CssClass="table table-striped table-bordered" >   
            <Columns>
            <asp:BoundField DataField="ProductID" HeaderText="ID" SortExpression="ProductID" />        
            <asp:BoundField DataField="Product.ProductName" HeaderText="Name" />        
            <asp:BoundField DataField="Product.UnitPrice" HeaderText="Price (each)" DataFormatString="{0:c}"/>     
            <asp:TemplateField   HeaderText="Quantity">            
                    <ItemTemplate>
                        <asp:TextBox ID="PurchaseQuantity" Width="40" runat="server" Text="<%#: Item.Quantity %>"></asp:TextBox> 
                    </ItemTemplate>        
            </asp:TemplateField>    
            <asp:TemplateField HeaderText="Item Total">            
                    <ItemTemplate>
                        <%#: String.Format("{0:c}", ((Convert.ToDouble(Item.Quantity)) *  Convert.ToDouble(Item.Product.UnitPrice)))%>
                    </ItemTemplate>        
            </asp:TemplateField> 
            <asp:TemplateField HeaderText="Remove Item">            
                    <ItemTemplate>
                        <asp:CheckBox id="Remove" runat="server"></asp:CheckBox>
                    </ItemTemplate>        
            </asp:TemplateField>    
            </Columns>    
        </asp:GridView>
        <div>
            <p></p>
            <strong>
                <asp:Label ID="LabelTotalText" runat="server" Text="Order Total: "></asp:Label>
                <asp:Label ID="lblTotal" runat="server" EnableViewState="false"></asp:Label>
            </strong> 
        </div>
      <br />
        <table> 
        <tr>
          <td>
            <asp:Button ID="UpdateBtn" runat="server" Text="Update" OnClick="UpdateBtn_Click" />
          </td>
          <td>
            <!--Checkout Placeholder -->
          </td>
        </tr>
        </table>
    </asp:Content>
    

Kullanıcı Update düğmesine tıkladığında UpdateBtn_Click olay işleyicisi çağrılır.When the user clicks the Update button, the UpdateBtn_Click event handler will be called. Bu olay işleyicisi, bir sonraki adımda ekleyeceğiniz kodu çağırır.This event handler will call the code that you'll add in the next step.

Daha sonra, ShoppingCart.aspx.cs dosyasında yer alan kodu, sepet öğeleri aracılığıyla döngü yapmak ve RemoveItem ve UpdateItem yöntemlerini çağırmak için güncelleştirebilirsiniz.Next, you can update the code contained in the ShoppingCart.aspx.cs file to loop through the cart items and call the RemoveItem and UpdateItem methods.

  1. Çözüm Gezgini, Web uygulaması projesinin kökündeki ShoppingCart.aspx.cs dosyasını açın.In Solution Explorer, open the ShoppingCart.aspx.cs file in the root of the web application project.

  2. Sarı ' de vurgulanan aşağıdaki kod bölümlerini ShoppingCart.aspx.cs dosyasına ekleyin:Add the following code sections highlighted in yellow to the ShoppingCart.aspx.cs file:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using WingtipToys.Models;
    using WingtipToys.Logic;
    using System.Collections.Specialized;
    using System.Collections;
    using System.Web.ModelBinding;
    
    namespace WingtipToys
    {
      public partial class ShoppingCart : System.Web.UI.Page
      {
        protected void Page_Load(object sender, EventArgs e)
        {
          using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())
          {
            decimal cartTotal = 0;
            cartTotal = usersShoppingCart.GetTotal();
            if (cartTotal > 0)
            {
              // Display Total.
              lblTotal.Text = String.Format("{0:c}", cartTotal);
            }
            else
            {
              LabelTotalText.Text = "";
              lblTotal.Text = "";
              ShoppingCartTitle.InnerText = "Shopping Cart is Empty";
              UpdateBtn.Visible = false;
            }
          }
        }
    
        public List<CartItem> GetShoppingCartItems()
        {
          ShoppingCartActions actions = new ShoppingCartActions();
          return actions.GetCartItems();
        }
    
        public List<CartItem> UpdateCartItems()
        {
          using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())
          {
            String cartId = usersShoppingCart.GetCartId();
    
            ShoppingCartActions.ShoppingCartUpdates[] cartUpdates = new ShoppingCartActions.ShoppingCartUpdates[CartList.Rows.Count];
            for (int i = 0; i < CartList.Rows.Count; i++)
            {
              IOrderedDictionary rowValues = new OrderedDictionary();
              rowValues = GetValues(CartList.Rows[i]);
              cartUpdates[i].ProductId = Convert.ToInt32(rowValues["ProductID"]);
    
              CheckBox cbRemove = new CheckBox();
              cbRemove = (CheckBox)CartList.Rows[i].FindControl("Remove");
              cartUpdates[i].RemoveItem = cbRemove.Checked;
    
              TextBox quantityTextBox = new TextBox();
              quantityTextBox = (TextBox)CartList.Rows[i].FindControl("PurchaseQuantity");
              cartUpdates[i].PurchaseQuantity = Convert.ToInt16(quantityTextBox.Text.ToString());
            }
            usersShoppingCart.UpdateShoppingCartDatabase(cartId, cartUpdates);
            CartList.DataBind();
            lblTotal.Text = String.Format("{0:c}", usersShoppingCart.GetTotal());
            return usersShoppingCart.GetCartItems();
          }
        }
    
        public static IOrderedDictionary GetValues(GridViewRow row)
        {
          IOrderedDictionary values = new OrderedDictionary();
          foreach (DataControlFieldCell cell in row.Cells)
          {
            if (cell.Visible)
            {
              // Extract values from the cell.
              cell.ContainingField.ExtractValuesFromCell(values, cell, row.RowState, true);
            }
          }
          return values;
        }
    
        protected void UpdateBtn_Click(object sender, EventArgs e)
        {
          UpdateCartItems();
        }
      }
    }
    

Kullanıcı, ShoppingCart. aspx sayfasındaki Güncelleştir düğmesine tıkladığında updatecartıtems yöntemi çağırılır.When the user clicks the Update button on the ShoppingCart.aspx page, the UpdateCartItems method is called. Updatecartıtems yöntemi, alışveriş sepetindeki her öğe için güncelleştirilmiş değerleri alır.The UpdateCartItems method gets the updated values for each item in the shopping cart. Ardından, Updatecartıtems yöntemi, alışveriş sepetinden öğe eklemek veya kaldırmak için UpdateShoppingCartDatabase yöntemini (sonraki adımda eklenen ve açıklanacak) çağırır.Then, the UpdateCartItems method calls the UpdateShoppingCartDatabase method (added and explained in the next step) to either add or remove items from the shopping cart. Veritabanı, alışveriş sepetindeki güncelleştirmeleri yansıtacak şekilde güncelleştirildikten sonra , GridView içinDataBind yöntemi çağırarak, alışveriş sepeti sayfasında GridView denetimi güncellenir.Once the database has been updated to reflect the updates to the shopping cart, the GridView control is updated on the shopping cart page by calling the DataBind method for the GridView. Ayrıca, alışveriş sepeti sayfasındaki toplam sipariş miktarı, güncelleştirilmiş öğe listesini yansıtacak şekilde güncelleştirilir.Also, the total order amount on the shopping cart page is updated to reflect the updated list of items.

Alışveriş sepeti öğelerini güncelleştirme ve kaldırmaUpdating and Removing Shopping Cart Items

ShoppingCart. aspx sayfasında, bir öğenin miktarını güncelleştirmek ve bir öğeyi kaldırmak için denetimlerin eklendiğini görebilirsiniz.On the ShoppingCart.aspx page, you can see controls have been added for updating the quantity of an item and removing an item. Şimdi bu denetimlerin çalışmasını sağlayacak kodu ekleyin.Now, add the code that will make these controls work.

  1. Çözüm Gezgini' de, ShoppingCartActions.cs dosyasını Logic klasöründe açın.In Solution Explorer, open the ShoppingCartActions.cs file in the Logic folder.

  2. Sarı ' de vurgulanan aşağıdaki kodu ShoppingCartActions.cs sınıf dosyasına ekleyin:Add the following code highlighted in yellow to the ShoppingCartActions.cs class file:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using WingtipToys.Models;
    
    namespace WingtipToys.Logic
    {
      public class ShoppingCartActions : IDisposable
      {
        public string ShoppingCartId { get; set; }
    
        private ProductContext _db = new ProductContext();
    
        public const string CartSessionKey = "CartId";
    
        public void AddToCart(int id)
        {
          // Retrieve the product from the database.           
          ShoppingCartId = GetCartId();
    
          var cartItem = _db.ShoppingCartItems.SingleOrDefault(
              c => c.CartId == ShoppingCartId
              && c.ProductId == id);
          if (cartItem == null)
          {
            // Create a new cart item if no cart item exists.                 
            cartItem = new CartItem
            {
              ItemId = Guid.NewGuid().ToString(),
              ProductId = id,
              CartId = ShoppingCartId,
              Product = _db.Products.SingleOrDefault(
               p => p.ProductID == id),
              Quantity = 1,
              DateCreated = DateTime.Now
            };
    
            _db.ShoppingCartItems.Add(cartItem);
          }
          else
          {
            // If the item does exist in the cart,                  
            // then add one to the quantity.                 
            cartItem.Quantity++;
          }
          _db.SaveChanges();
        }
    
        public void Dispose()
        {
          if (_db != null)
          {
            _db.Dispose();
            _db = null;
          }
        }
    
        public string GetCartId()
        {
          if (HttpContext.Current.Session[CartSessionKey] == null)
          {
            if (!string.IsNullOrWhiteSpace(HttpContext.Current.User.Identity.Name))
            {
              HttpContext.Current.Session[CartSessionKey] = HttpContext.Current.User.Identity.Name;
            }
            else
            {
              // Generate a new random GUID using System.Guid class.     
              Guid tempCartId = Guid.NewGuid();
              HttpContext.Current.Session[CartSessionKey] = tempCartId.ToString();
            }
          }
          return HttpContext.Current.Session[CartSessionKey].ToString();
        }
    
        public List<CartItem> GetCartItems()
        {
          ShoppingCartId = GetCartId();
    
          return _db.ShoppingCartItems.Where(
              c => c.CartId == ShoppingCartId).ToList();
        }
    
        public decimal GetTotal()
        {
          ShoppingCartId = GetCartId();
          // Multiply product price by quantity of that product to get        
          // the current price for each of those products in the cart.  
          // Sum all product price totals to get the cart total.   
          decimal? total = decimal.Zero;
          total = (decimal?)(from cartItems in _db.ShoppingCartItems
                             where cartItems.CartId == ShoppingCartId
                             select (int?)cartItems.Quantity *
                             cartItems.Product.UnitPrice).Sum();
          return total ?? decimal.Zero;
        }
    
        public ShoppingCartActions GetCart(HttpContext context)
        {
          using (var cart = new ShoppingCartActions())
          {
            cart.ShoppingCartId = cart.GetCartId();
            return cart;
          }
        }
    
        public void UpdateShoppingCartDatabase(String cartId, ShoppingCartUpdates[] CartItemUpdates)
        {
          using (var db = new WingtipToys.Models.ProductContext())
          {
            try
            {
              int CartItemCount = CartItemUpdates.Count();
              List<CartItem> myCart = GetCartItems();
              foreach (var cartItem in myCart)
              {
                // Iterate through all rows within shopping cart list
                for (int i = 0; i < CartItemCount; i++)
                {
                  if (cartItem.Product.ProductID == CartItemUpdates[i].ProductId)
                  {
                    if (CartItemUpdates[i].PurchaseQuantity < 1 || CartItemUpdates[i].RemoveItem == true)
                    {
                      RemoveItem(cartId, cartItem.ProductId);
                    }
                    else
                    {
                      UpdateItem(cartId, cartItem.ProductId, CartItemUpdates[i].PurchaseQuantity);
                    }
                  }
                }
              }
            }
            catch (Exception exp)
            {
              throw new Exception("ERROR: Unable to Update Cart Database - " + exp.Message.ToString(), exp);
            }
          }
        }
    
        public void RemoveItem(string removeCartID, int removeProductID)
        {
          using (var _db = new WingtipToys.Models.ProductContext())
          {
            try
            {
              var myItem = (from c in _db.ShoppingCartItems where c.CartId == removeCartID && c.Product.ProductID == removeProductID select c).FirstOrDefault();
              if (myItem != null)
              {
                // Remove Item.
                _db.ShoppingCartItems.Remove(myItem);
                _db.SaveChanges();
              }
            }
            catch (Exception exp)
            {
              throw new Exception("ERROR: Unable to Remove Cart Item - " + exp.Message.ToString(), exp);
            }
          }
        }
    
        public void UpdateItem(string updateCartID, int updateProductID, int quantity)
        {
          using (var _db = new WingtipToys.Models.ProductContext())
          {
            try
            {
              var myItem = (from c in _db.ShoppingCartItems where c.CartId == updateCartID && c.Product.ProductID == updateProductID select c).FirstOrDefault();
              if (myItem != null)
              {
                myItem.Quantity = quantity;
                _db.SaveChanges();
              }
            }
            catch (Exception exp)
            {
              throw new Exception("ERROR: Unable to Update Cart Item - " + exp.Message.ToString(), exp);
            }
          }
        }
    
        public void EmptyCart()
        {
          ShoppingCartId = GetCartId();
          var cartItems = _db.ShoppingCartItems.Where(
              c => c.CartId == ShoppingCartId);
          foreach (var cartItem in cartItems)
          {
            _db.ShoppingCartItems.Remove(cartItem);
          }
          // Save changes.             
          _db.SaveChanges();
        }
    
        public int GetCount()
        {
          ShoppingCartId = GetCartId();
    
          // Get the count of each item in the cart and sum them up          
          int? count = (from cartItems in _db.ShoppingCartItems
                        where cartItems.CartId == ShoppingCartId
                        select (int?)cartItems.Quantity).Sum();
          // Return 0 if all entries are null         
          return count ?? 0;
        }
    
        public struct ShoppingCartUpdates
        {
          public int ProductId;
          public int PurchaseQuantity;
          public bool RemoveItem;
        }
      }
    }
    

ShoppingCart.aspx.cs sayfasındaki UpdateCartItems yönteminden çağrılan UpdateShoppingCartDatabase yöntemi, alışveriş sepetinden öğe güncelleştirme ya da kaldırma mantığını içerir.The UpdateShoppingCartDatabase method, called from the UpdateCartItems method on the ShoppingCart.aspx.cs page, contains the logic to either update or remove items from the shopping cart. UpdateShoppingCartDatabase yöntemi, alışveriş sepeti listesinin içindeki tüm satırlarda yinelenir.The UpdateShoppingCartDatabase method iterates through all the rows within the shopping cart list. Bir alışveriş sepeti öğesi kaldırılmak üzere işaretlenmişse veya miktar bir değerden küçükse RemoveItem yöntemi çağrılır.If a shopping cart item has been marked to be removed, or the quantity is less than one, the RemoveItem method is called. Aksi halde, UpdateItem yöntemi çağrıldığında, alışveriş sepeti öğesi güncelleştirmeler için denetlenir.Otherwise, the shopping cart item is checked for updates when the UpdateItem method is called. Alışveriş sepeti öğesi kaldırıldıktan veya güncelleştirildikten sonra, veritabanı değişiklikleri kaydedilir.After the shopping cart item has been removed or updated, the database changes are saved.

ShoppingCartUpdates yapısı, tüm alışveriş sepeti öğelerini tutmak için kullanılır.The ShoppingCartUpdates structure is used to hold all the shopping cart items. UpdateShoppingCartDatabase yöntemi, herhangi bir öğenin güncelleştirilmesini veya kaldırılmasını öğrenmek için ShoppingCartUpdates yapısını kullanır.The UpdateShoppingCartDatabase method uses the ShoppingCartUpdates structure to determine if any of the items need to be updated or removed.

Sonraki öğreticide, ürünleri satın aldıktan sonra alışveriş sepetini temizlemek için EmptyCart yöntemini kullanacaksınız.In the next tutorial, you will use the EmptyCart method to clear the shopping cart after purchasing products. Ancak şimdilik, alışveriş sepetindeki öğelerin sayısını öğrenmek için ShoppingCartActions.cs dosyasına eklediğiniz GetCount yöntemini kullanacaksınız.But for now, you will use the GetCount method that you just added to the ShoppingCartActions.cs file to determine how many items are in the shopping cart.

Alışveriş sepeti sayacı eklemeAdding a Shopping Cart Counter

Kullanıcının alışveriş sepetindeki toplam öğe sayısını görüntülemesine izin vermek için, site. Master sayfasına bir sayaç ekleyeceksiniz.To allow the user to view the total number of items in the shopping cart, you will add a counter to the Site.Master page. Bu sayaç, alışveriş sepetine bir bağlantı görevi görür.This counter will also act as a link to the shopping cart.

  1. Çözüm Gezgini, site. Master sayfasını açın.In Solution Explorer, open the Site.Master page.

  2. Aşağıdaki gibi görünmesi için, kılavuz ' de gösterildiği gibi alışveriş sepeti sayacı bağlantısını, gezinti bölümüne ekleyerek biçimlendirmeyi değiştirin:Modify the markup by adding the shopping cart counter link as shown in yellow to the navigation section so it appears as follows:

    <ul class="nav navbar-nav">
          <li><a runat="server" href="~/">Home</a></li>
          <li><a runat="server" href="~/About">About</a></li>
          <li><a runat="server" href="~/Contact">Contact</a></li>
          <li><a runat="server" href="~/ProductList">Products</a></li>
          <li><a runat="server" href="~/ShoppingCart" ID="cartCount">&nbsp;</a></li>
      </ul>
    
  3. Daha sonra, site.Master.cs dosyasının arka plan kodunu, sarıya vurgulanmış kodu aşağıdaki gibi ekleyerek güncelleştirin:Next, update the code-behind of the Site.Master.cs file by adding the code highlighted in yellow as follows:

    using System;
    using System.Collections.Generic;
    using System.Security.Claims;
    using System.Security.Principal;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Linq;
    using WingtipToys.Models;
    using WingtipToys.Logic;
    
    namespace WingtipToys
    {
        public partial class SiteMaster : MasterPage
        {
            private const string AntiXsrfTokenKey = "__AntiXsrfToken";
            private const string AntiXsrfUserNameKey = "__AntiXsrfUserName";
            private string _antiXsrfTokenValue;
    
            protected void Page_Init(object sender, EventArgs e)
            {
                // The code below helps to protect against XSRF attacks
                var requestCookie = Request.Cookies[AntiXsrfTokenKey];
                Guid requestCookieGuidValue;
                if (requestCookie != null && Guid.TryParse(requestCookie.Value, out requestCookieGuidValue))
                {
                    // Use the Anti-XSRF token from the cookie
                    _antiXsrfTokenValue = requestCookie.Value;
                    Page.ViewStateUserKey = _antiXsrfTokenValue;
                }
                else
                {
                    // Generate a new Anti-XSRF token and save to the cookie
                    _antiXsrfTokenValue = Guid.NewGuid().ToString("N");
                    Page.ViewStateUserKey = _antiXsrfTokenValue;
    
                    var responseCookie = new HttpCookie(AntiXsrfTokenKey)
                    {
                        HttpOnly = true,
                        Value = _antiXsrfTokenValue
                    };
                    if (FormsAuthentication.RequireSSL && Request.IsSecureConnection)
                    {
                        responseCookie.Secure = true;
                    }
                    Response.Cookies.Set(responseCookie);
                }
    
                Page.PreLoad += master_Page_PreLoad;
            }
    
            protected void master_Page_PreLoad(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    // Set Anti-XSRF token
                    ViewState[AntiXsrfTokenKey] = Page.ViewStateUserKey;
                    ViewState[AntiXsrfUserNameKey] = Context.User.Identity.Name ?? String.Empty;
                }
                else
                {
                    // Validate the Anti-XSRF token
                    if ((string)ViewState[AntiXsrfTokenKey] != _antiXsrfTokenValue
                        || (string)ViewState[AntiXsrfUserNameKey] != (Context.User.Identity.Name ?? String.Empty))
                    {
                        throw new InvalidOperationException("Validation of Anti-XSRF token failed.");
                    }
                }
            }
    
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void Page_PreRender(object sender, EventArgs e)
            {
              using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())
              {
                string cartStr = string.Format("Cart ({0})", usersShoppingCart.GetCount());
                cartCount.InnerText = cartStr;
              }
            }
    
            public IQueryable<Category> GetCategories()
            {
              var _db = new WingtipToys.Models.ProductContext();
              IQueryable<Category> query = _db.Categories;
              return query;
            }
    
            protected void Unnamed_LoggingOut(object sender, LoginCancelEventArgs e)
            {
                Context.GetOwinContext().Authentication.SignOut();
            }
        }
    }
    

Sayfa HTML olarak işlenmeden önce Page_PreRender olayı tetiklenir.Before the page is rendered as HTML, the Page_PreRender event is raised. Page_PreRender işleyicisinde, alışveriş sepetinin toplam sayısı GetCount yöntemi çağırarak belirlenir.In the Page_PreRender handler, the total count of the shopping cart is determined by calling the GetCount method. Döndürülen değer, site. Master sayfasının biçimlendirmesine dahil edilen cartCount aralığına eklenir.The returned value is added to the cartCount span included in the markup of the Site.Master page. <span> Etiketler, iç öğelerin düzgün şekilde işlenmesini sağlar.The <span> tags enables the inner elements to be properly rendered. Sitenin herhangi bir sayfası görüntülendiğinde, alışveriş sepeti toplamı görüntülenir.When any page of the site is displayed, the shopping cart total will be displayed. Kullanıcı alışveriş sepetini göstermek için satın alma sepet toplamı ' na de tıklayabilirsiniz.The user can also click the shopping cart total to display the shopping cart.

Tamamlanmış alışveriş sepetini test etmeTesting the Completed Shopping Cart

Alışveriş sepetindeki öğeleri nasıl ekleyebileceğiniz, silebildiğini ve güncelleştirecağınızı görmek için uygulamayı şimdi çalıştırabilirsiniz.You can run the application now to see how you can add, delete, and update items in the shopping cart. Alışveriş sepeti toplamı, alışveriş sepetindeki tüm öğelerin toplam maliyetini yansıtır.The shopping cart total will reflect the total cost of all items in the shopping cart.

  1. Uygulamayı çalıştırmak için F5'e basın.Press F5 to run the application.
    Tarayıcı açılır ve default. aspx sayfasını gösterir.The browser opens and shows the Default.aspx page.

  2. Kategori gezinti menüsünde otomobiller ' i seçin.Select Cars from the category navigation menu.

  3. İlk ürünün yanındaki sepet Ekle bağlantısına tıklayın.Click the Add To Cart link next to the first product.
    ShoppingCart. aspx sayfası, sipariş toplamla birlikte görüntülenir.The ShoppingCart.aspx page is displayed with the order total.

  4. Kategori gezinti menüsünden düzlemler ' i seçin.Select Planes from the category navigation menu.

  5. İlk ürünün yanındaki sepet Ekle bağlantısına tıklayın.Click the Add To Cart link next to the first product.

  6. Alışveriş sepetindeki ilk öğenin miktarını 3 ' e ayarlayın ve ikinci öğenin öğesini kaldır onay kutusunu seçin.Set the quantity of the first item in the shopping cart to 3 and select the Remove Item check box of the second item.

  7. Alışveriş sepeti sayfasını güncelleştirmek ve yeni sipariş toplamını göstermek için Güncelleştir düğmesine tıklayın.Click the Update button to update the shopping cart page and display the new order total.

    Alışveriş sepeti-sepet güncelleştirmesi

ÖzetSummary

Bu öğreticide, Wingtip Toys Web Forms örnek uygulaması için bir alışveriş sepeti oluşturdunuz.In this tutorial, you have created a shopping cart for the Wingtip Toys Web Forms sample application. Bu öğreticide, Entity Framework Code First, veri ek açıklamaları, türü kesin belirlenmiş veri denetimleri ve model bağlamayı kullandınız.During this tutorial you have used Entity Framework Code First, data annotations, strongly typed data controls, and model binding.

Alışveriş sepeti, kullanıcının satın alma için seçtiği öğelerin eklenmesini, silinmesini ve güncelleştirilmesini destekler.The shopping cart supports adding, deleting, and updating items that the user has selected for purchase. Alışveriş sepeti işlevinin uygulanmasının yanı sıra, bir GridView denetimindeki alışveriş sepeti öğelerini görüntülemeyi ve sipariş toplamını hesaplamayı öğrenmiş olursunuz.In addition to implementing the shopping cart functionality, you have learned how to display shopping cart items in a GridView control and calculate the order total.

Açıklanan işlevselliğin gerçek bir iş uygulamasında nasıl çalıştığını anlamak için, nopCommerce -ASP.NET tabanlı açık kaynaklı eCommerce alışveriş sepetinin örneğini görüntüleyebilirsiniz.In order to understand how the described functionality works in a real business application, you can view the example of nopCommerce - ASP.NET based open source eCommerce shopping cart. İlk olarak, Web Forms oluşturulmuştur ve bu yıllar üzerinde, MVC 'ye taşındığını ve şimdi ASP.NET Core.Originally, it was built on Web Forms and over the years it moved to MVC and now to ASP.NET Core.

Ek bilgiAddition Information

ASP.NET Oturum Durumuna Genel BakışASP.NET Session State Overview