天天看點

profile 實作購物車 執行個體(一)(轉)

首先要了解什麼是Profile,不了解就查下資料跟MSDN吧。

首先建立兩個類,商品類跟購物車類。這個購物車類要進行存儲。(這裡的篇幅可能回很長,希望本着上進的朋友耐心看完,肯定會有收獲的。我的代碼都是從自己的項目中copy下來的,都是生成成功的代碼)。

首先商品類---CartItem.cs。我定義了 商品的特征,id,name,price,imageurl,quntity(ID,名稱,價格,圖檔URL,數量);

CartItem.cs using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

/// <summary>

/// CartItem 是購物車中的購物項

/// </summary>

///

//Serializable含義為CartItem的對象支援序列化,這樣可以儲存資料庫當中

[Serializable]

public class CartItem

{

 public CartItem()

 {

  //

  // TODO: 在此處添加構造函數邏輯

  //

 }

    public CartItem(Guid id,string name,decimal price,string imageurl)

    {

        this.id = id;

        this.name = name;  

        this.price = price;

        this.imgurl=imageurl;

    }

    public CartItem(Guid id,string name,decimal price,int quantity,string imageurl)

    {

        this.id = id;

        this.name = name;

        this.price = price;

        this.quantity = quantity;

        this.imgurl = imageurl;

        //Url();

    }

    Guid id;

    string name;

    decimal price;

    int quantity=1;

    string imgurl;

    public string Imgurl

    {

        get { return imgurl; }

        set { imgurl = value; }

    }

    /// <summary>

    /// 隻讀的商品唯一編号

    /// </summary>

    public Guid Id

    {

        get { return id; }

    }

    public string Name

    {

        get { return name; }

    }

    public decimal Price

    {

        get { return price; }

    }

    public int Quantity

    {

        get { return quantity; }

        set { quantity = value; }

    }

}

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

/// <summary>

/// CartItem 是購物車中的購物項

/// </summary>

///

//Serializable含義為CartItem的對象支援序列化,這樣可以儲存資料庫當中

[Serializable]

public class CartItem

{

 public CartItem()

 {

  //

  // TODO: 在此處添加構造函數邏輯

  //

 }

    public CartItem(Guid id,string name,decimal price,string imageurl)

    {

        this.id = id;

        this.name = name;  

        this.price = price;

        this.imgurl=imageurl;

    }

    public CartItem(Guid id,string name,decimal price,int quantity,string imageurl)

    {

        this.id = id;

        this.name = name;

        this.price = price;

        this.quantity = quantity;

        this.imgurl = imageurl;

        //Url();

    }

    Guid id;

    string name;

    decimal price;

    int quantity=1;

    string imgurl;

    public string Imgurl

    {

        get { return imgurl; }

        set { imgurl = value; }

    }

    /// <summary>

    /// 隻讀的商品唯一編号

    /// </summary>

    public Guid Id

    {

        get { return id; }

    }

    public string Name

    {

        get { return name; }

    }

    public decimal Price

    {

        get { return price; }

    }

    public int Quantity

    {

        get { return quantity; }

        set { quantity = value; }

    }

}

Cart.cs using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Collections;

/// <summary>

/// Cart 購物車類

/// </summary>

///

[Serializable]

public class Cart

{

    Hashtable Items = new Hashtable();

    /// <summary>

    /// 傳回購物車中商品的集合

    /// </summary>

    public ICollection CartItems

    {

        get

        {

            return  Items.Values;

        }

    }

    /// <summary>

    /// 傳回購物車中商品的總價

    /// </summary>

    public decimal Total

    {

        get

        {

            decimal sum = 0;

            foreach (CartItem item in Items.Values)

            {

                sum += item.Price * item.Quantity;

            }

            return sum;

        }

    }

 public Cart()

 {

  //

  // TODO: 在此處添加構造函數邏輯

  //

 }

    /// <summary>

    /// 添加商品到購物車

    /// </summary>

    /// <param name="id">商品編号</param>

    /// <param name="name">商品名稱</param>

    /// <param name="price">商品價格</param>

    public void AddItem(Guid id, string name, decimal price,string imageurl)

    {

        //添加商品步驟分析:1檢查購物車中是否有該類商品已經存在,如果沒有就向購物車增加該商品;2如果有該商品,那麼就對已經存在的該商品,數量累加1

        CartItem item =(CartItem )Items[id];

        if (item == null)

        {

            Items.Add(id, new CartItem(id, name, price,imageurl));

        }

        else

        {

            item.Quantity++;

            Items[id] = item;

        }

    }

    /// <summary>

    /// 從購物車當中删除商品

    /// </summary>

    /// <param name="id">編号</param>

    public void RemoveItem(Guid id)

    {

        //删除商品:1将存在于購物車當中的商品數量減1;2判斷該商品數量是否為0,如果為0,我們将該商品徹底從購物車中删除,否則就更新購物車;

        CartItem item = (CartItem)Items[id];

        if (item == null)

        {

            return;

        }

        item.Quantity--;

        if (item.Quantity == 0)

        {

            Items.Remove(id);

        }

        else

        {

            Items[id] = item;

        }

    }

    /// <summary>

    /// 将匿名使用者的購物車,遷移到實名使用者購物車的方法

    /// </summary>

    /// <param name="CItem"></param>

    public void AddCartItem(CartItem CItem)

    {

        CartItem item = (CartItem)Items[CItem.Id];

        if (item == null)

        {

            Items.Add(CItem.Id, new CartItem(CItem.Id, CItem.Name, CItem.Price, CItem.Quantity, CItem.Imgurl));

        }

        else

        {

            item.Quantity += CItem.Quantity;

            Items[CItem.Id] = item;

        }

    }

}

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Collections;

/// <summary>

/// Cart 購物車類

/// </summary>

///

[Serializable]

public class Cart

{

    Hashtable Items = new Hashtable();

    /// <summary>

    /// 傳回購物車中商品的集合

    /// </summary>

    public ICollection CartItems

    {

        get

        {

            return  Items.Values;

        }

    }

    /// <summary>

    /// 傳回購物車中商品的總價

    /// </summary>

    public decimal Total

    {

        get

        {

            decimal sum = 0;

            foreach (CartItem item in Items.Values)

            {

                sum += item.Price * item.Quantity;

            }

            return sum;

        }

    }

 public Cart()

 {

  //

  // TODO: 在此處添加構造函數邏輯

  //

 }

    /// <summary>

    /// 添加商品到購物車

    /// </summary>

    /// <param name="id">商品編号</param>

    /// <param name="name">商品名稱</param>

    /// <param name="price">商品價格</param>

    public void AddItem(Guid id, string name, decimal price,string imageurl)

    {

        //添加商品步驟分析:1檢查購物車中是否有該類商品已經存在,如果沒有就向購物車增加該商品;2如果有該商品,那麼就對已經存在的該商品,數量累加1

        CartItem item =(CartItem )Items[id];

        if (item == null)

        {

            Items.Add(id, new CartItem(id, name, price,imageurl));

        }

        else

        {

            item.Quantity++;

            Items[id] = item;

        }

    }

    /// <summary>

    /// 從購物車當中删除商品

    /// </summary>

    /// <param name="id">編号</param>

    public void RemoveItem(Guid id)

    {

        //删除商品:1将存在于購物車當中的商品數量減1;2判斷該商品數量是否為0,如果為0,我們将該商品徹底從購物車中删除,否則就更新購物車;

        CartItem item = (CartItem)Items[id];

        if (item == null)

        {

            return;

        }

        item.Quantity--;

        if (item.Quantity == 0)

        {

            Items.Remove(id);

        }

        else

        {

            Items[id] = item;

        }

    }

    /// <summary>

    /// 将匿名使用者的購物車,遷移到實名使用者購物車的方法

    /// </summary>

    /// <param name="CItem"></param>

    public void AddCartItem(CartItem CItem)

    {

        CartItem item = (CartItem)Items[CItem.Id];

        if (item == null)

        {

            Items.Add(CItem.Id, new CartItem(CItem.Id, CItem.Name, CItem.Price, CItem.Quantity, CItem.Imgurl));

        }

        else

        {

            item.Quantity += CItem.Quantity;

            Items[CItem.Id] = item;

        }

    }

}

這兩個類簡單的不能再簡單了。哈希表,就是一個有鍵值對構成的表。我這裡把商品的ID作為了key

接下來配置一下web.config檔案,啟用文中所說的Profile我們要存儲的多項就是 Items 這個對象了。

是以profile節要這樣配置

web.config

 <system.web>

  <anonymousIdentification enabled="true"/>

  <profile enabled="true" defaultProvider="Myprofile">

   <providers>

    <add name="Myprofile" type="System.Web.Profile.SqlProfileProvider" connectionStringName="AspNetDBConn"/>

   </providers>

   <properties>

    <add name="ShoppingCart" type="Cart" allowAnonymous="true" serializeAs="Binary"/>

   </properties>

  </profile>

</system.web>

注意!!這裡的代碼為配置檔案的一部分---profile的部分

這樣我們就能在項目的中的任何地方用

profile 的配置,這裡就不在贅述了

profile.ShoppingCart .**** 通路Cart類的屬性跟方法了

不能再寫了,沒了解過profile 的這裡先要了解一下。

沒問題請看第二篇