فروشگاه آنلاین با MVC بخش یازدهم


در مقاله قبل ، کلاس سبدخرید را ایجاد کردیم و توابع Add و Remove را برای آن تعریف و پیاده سازی کردیم . در این مقاله ، می خواهیم آیتمهایی که به سبد خرید اضافه شده اند را در کوکی مرورگر کاربر ذخیره کنیم و همچنین کنترولر ShoppingCart را تکمیل کنیم .

 

تعریف کوکی برای CartId :

آیدی منحصر بفرد برای سبد خرید هر کاربر را در کوکی ذخیره می کنیم . زیرا فرض کنید کاربر امروز چند محصول را به سبدخرید اضافه کرده است و وقت تکمیل فرآیند خریدش را ندارد . این محصولات باید تا مدتی در سبدخرید او باقی بماند (در این مثال یک هفته) تا در این مدت ، هر بار که به فروشگاه مراجعه می کند آیتم هایی که قبلا به سبد خرید اضافه کرده است را مشاهده کند .

آیدی سبدخرید (CartId) را از نوع Guid تعریف می کنیم که یک رشته یکتا برمیگرداند .

تابع مربوطه بصورت زیر تعریف می شود :

 
private string GetCartId(HttpContextBase http)
{
    var cookie = http.Request.Cookies.Get("ShoppingCart");
    var cartId = string.Empty;
 
    if(cookie == null || string.IsNullOrWhiteSpace(cookie.Value))
    {
        cookie = new HttpCookie("ShoppingCart");
        cartId = Guid.NewGuid().ToString();
        cookie.Value = cartId;
        cookie.Expires = DateTime.Now.AddDays(7);
        http.Response.Cookies.Add(cookie);
    }
    else
    {
        cartId = cookie.Value;
    }
    return cartId;
}
                                           

در شرط if بررسی می شود که اگر cookie خالی است یک کوکی جدید برای کاربر بساز و اگر کوکی از قبل وجود دارد ، مقدارش را به cartId اختصاص دهد و return کند .

 

کنترولر ShoppingCart :

در کنترولر سبدخرید ، اکشنی بنام AddToCart ایجاد می کنیم که بصورت زیر تعریف می شود :

 
public ActionResult AddToCart(int id)
{
    var Cart = new ShoppingCart(HttpContext);
    Cart.Add(id);
    return (RedirectToAction("Index"));
}
                                           

Httpcontext را به کلاس ShoppingCart ارسال کرده ایم و در نهایت به صفحه سبدخرید redirect شده است .

اکشن RemoveFromCart را نیز مانند Add بدین صورت تعریف می کنیم :

 
public ActionResult RemoveFromCart(int id)
{
    var Cart = new ShoppingCart(HttpContext);
    Cart.Remove(id);
    return (RedirectToAction("Index"));
}
                                           

تست سبد خرید :

برای انجام تست کارکرد سبدخرید ، پروژه خود را اجرا کرده و آدرس زیر را در نوار آدرس بنویسید :

Shoppingcart/addtocart/2

در واقع از کنترولر ShoppingCart اکشن addtoCart را با پارامتر ۲ صدا زده ایم . با اجرای این آدرس ، پیام خطایی مبنی بر عدم وجود Index View نمایش داده می شود ( ولی نگران نباشید ، در مقاله بعد ویو را اضافه خواهیم کرد ! ) اکنون دیتابیس Management Studio را باز کنید و جدول cartItems را select کنید . با تصویر زیر روبرو خواهید شد :

تست سبد خرید

و اگر آدرس فوق را مجددا اجرا کنید ، ستون Count در تصویر فوق برابر ۲ خواهد شد .

حال می خواهیم حذف آیتم از سبدخرید را تست کنیم . بدین منظور ، آدرس زیر را پس از اجرای پروژه در نوار آدرس تایپ کرده و اینتر کنید :

Shoppingcart/removefromcart/2

پس از اجرای این آدرس ، مشاهده می کنید که یکی از محصولات با id=2 از سبدخرید پاک می شود .

در مقاله بعد میخواهیم برای سبد خرید ، view ایجاد کنیم . همراه ما باشید …laugh



دیدگاه ها :


  1. moslem aslani , سه شنبه ۲۱ اردیبهشت ۱۳۹۵ در ساعت ۱۸:۵۷

    سلام
    من میخوام تا وقتی که کاربر دکمه تایید رو نزده محتوای سبد(محصولات و تعداد و ….) داخل کوکی باقی بمونه و بعد از تایید داخل دیتابیس ذخیره بشن.این کار رو کردم با کد زیر
    HttpCookie myCookie = Request.Cookies[“cart”];
    if (myCookie == null)
    {
    myCookie = new HttpCookie(“cart”);
    }
    myCookie.Expires = DateTime.Now.AddMinutes(10);
    myCookie.Values.Add(“product”, id.ToString());
    Response.Cookies.Add(myCookie);
    ShopService s = new ShopService();
    return s.CartProducts().Count;
    و چون Value بصورت زیر ذخیره میشه نمیدونم چطوری باید یه محصول رو از سبد پاک کنم؟؟؟
    ممنون میشم پاسخ بدین