پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
بیایید این کد ویو Razor را بررسی کنیم و توضیح دهیم که هر بخش آن چه وظیفهای دارد.
توضیح کد
۱. تنظیمات ViewData و Layout
کد:
html
@{
ViewData["Title"] = "Add";
Layout = "~/Areas/Admin/Views/Shared/_AdminLayout.cshtml";
}
این بلاک کد تنظیمات مربوط به ViewData و Layout ویو را مشخص میکند:
ViewData["Title"] = "Add";:
عنوان ویو را به "Add" تنظیم میکند.
Layout = "~/Areas/Admin/Views/Shared/_AdminLayout.cshtml";:
مسیر Layoutی که ویو باید از آن استفاده کند را تنظیم میکند. در اینجا Layout مربوط به بخش Admin است.
۲. ساختار HTML برای فرم
ساختار اصلی:
html
<section class="basic-elements">
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">
<div class="card-title-wrap bar-success">
<h4 class="card-title mb-0">افزودن اسلایدر جدید</h4>
</div>
</div>
<div class="card-body">
<div class="px-3">
<div class="form">
<div class="form-body">
<form method="post" class="row" enctype="multipart/form-data">
این بخش ساختار اصلی HTML را تنظیم میکند و شامل تگهای مختلف برای طرحبندی و استایلدهی است. از کلاسهای Bootstrap برای طرحبندی استفاده میشود.
۳. فیلد ورودی برای لینک
کد:
html
<div class="col-xl-3 col-lg-6 col-md-12 mb-1">
<fieldset class="form-group">
<label for="basicInput">آدرس لینک</label>
<input type="text" class="form-control" name="link">
</fieldset>
</div>
این بخش شامل یک فیلد ورودی برای لینک است:
name="link":
نام فیلد متن برای ورودی لینک.
class="form-control":
استفاده از کلاس Bootstrap برای استایلدهی.
۴. فیلد ورودی برای تصویر
کد:
html
<div class="col-xl-3 col-lg-6 col-md-12 mb-1">
<fieldset class="form-group">
<label for="basicInput">تصویر</label>
<input type="file" name="file" />
</fieldset>
</div>
این بخش شامل یک فیلد ورودی برای انتخاب تصویر است:
name="file":
نام فیلد فایل برای انتخاب تصویر.
۵. دکمه ارسال فرم
کد:
html
<div class="col-xl-3 col-lg-4 col-md-12 mb-1">
<fieldset class="form-group">
<br />
<button class="btn btn-success col-md-12">آپلود تصویر</button>
</fieldset>
</div>
این بخش شامل دکمهای برای ارسال فرم است:
class="btn btn-success col-md-12":
استفاده از کلاسهای Bootstrap برای استایلدهی دکمه ارسال.
نتیجهگیری
این کد یک ویو برای افزودن اسلایدر جدید به صفحه اصلی ایجاد میکند. از کلاسهای Bootstrap برای استایلدهی و کارکرد بهتر استفاده میکند. فرم شامل فیلدهایی برای وارد کردن آدرس لینک، انتخاب تصویر و دکمه ارسال فرم است. این فرم به کاربر امکان میدهد که یک اسلایدر جدید را اضافه کند و اطلاعات مربوط به آن را به سرور ارسال کند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
بیایید این کلاس ViewModel را بررسی کنیم و توضیح دهیم که هر بخش آن چه وظیفهای دارد.
توضیح کد
کلاس HomePageViewModel
کلاس: HomePageViewModel
csharp
public class HomePageViewModel
{
public List<SliderDto> Sliders { get; set; }
public List<HomePageImagesDto> PageImages { get; set; }
public List<ProductForSiteDto> Camera { get; set; }
public List<ProductForSiteDto> Mobile { get; set; }
public List<ProductForSiteDto> Laptop { get; set; }
}
این کلاس یک ViewModel است که به منظور انتقال دادهها از کنترلر به ویو در صفحه اصلی استفاده میشود. ViewModel ها معمولاً برای تجمیع دادههایی که از مدلهای مختلف بدست میآیند، استفاده میشوند تا دادهها به صورت ساختاریافته به ویو ارسال شوند. کلاس HomePageViewModel دارای پنج ویژگی است که هرکدام لیستی از DTOهای مختلف را نگهداری میکند.
توضیح ویژگیها:
Sliders:
نوع: List<SliderDto>
توضیح: این ویژگی یک لیست از SliderDto را نگهداری میکند که شامل اطلاعات مربوط به اسلایدرهای صفحه اصلی است.
PageImages:
نوع: List<HomePageImagesDto>
توضیح: این ویژگی یک لیست از HomePageImagesDto را نگهداری میکند که شامل اطلاعات مربوط به تصاویر صفحه اصلی است.
Camera:
نوع: List<ProductForSiteDto>
توضیح: این ویژگی یک لیست از ProductForSiteDto را نگهداری میکند که شامل اطلاعات مربوط به محصولات دستهبندی دوربینها است.
Mobile:
نوع: List<ProductForSiteDto>
توضیح: این ویژگی یک لیست از ProductForSiteDto را نگهداری میکند که شامل اطلاعات مربوط به محصولات دستهبندی موبایلها است.
Laptop:
نوع: List<ProductForSiteDto>
توضیح: این ویژگی یک لیست از ProductForSiteDto را نگهداری میکند که شامل اطلاعات مربوط به محصولات دستهبندی لپتاپها است.
نتیجهگیری
این ViewModel برای انتقال دادههای صفحه اصلی از کنترلر به ویو استفاده میشود. ویژگیهای این کلاس شامل لیستهایی از اسلایدرها، تصاویر صفحه اصلی و محصولات در دستهبندیهای مختلف است. این روش به شما امکان میدهد که دادهها را به صورت سازمانیافته و ساختاریافته به ویو ارسال کنید و از آنها برای نمایش اطلاعات در صفحه اصلی استفاده کنید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
بیایید این کد کنترلر HomeController را بررسی و توضیح دهیم که هر بخش آن چه وظیفهای دارد.
توضیح کد
کلاس HomeController
کلاس: HomeController
csharp
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IGetSliderService _getSliderService;
private readonly IGetHomePageImagesService _homePageImagesService;
private readonly IProductFacad _productFacad;
public HomeController(ILogger<HomeController> logger
, IGetSliderService getSliderService
, IGetHomePageImagesService homePageImagesService
, IProductFacad productFacad)
{
_logger = logger;
_getSliderService = getSliderService;
_homePageImagesService = homePageImagesService;
_productFacad = productFacad;
}
public IActionResult Index()
{
HomePageViewModel homePage = new HomePageViewModel()
{
Sliders = _getSliderService.Execute().Data,
PageImages = _homePageImagesService.Execute().Data,
Camera = _productFacad.GetProductForSiteService.Execute(Ordering.theNewest
, null, 1, 6, 25).Data.Products,
};
return View(homePage);
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
توضیح بخشهای مختلف کلاس:
اعضای خصوصی (private)
ILogger<HomeController> _logger:
این عضو برای لاگگیری و ثبت رویدادها استفاده میشود.
IGetSliderService _getSliderService: این عضو برای دریافت اسلایدرهای صفحه اصلی استفاده میشود.
IGetHomePageImagesService _homePageImagesService:
این عضو برای دریافت تصاویر صفحه اصلی استفاده میشود.
IProductFacad _productFacad:
این عضو برای دریافت محصولات صفحه اصلی استفاده میشود.
سازنده HomeController
csharp
public HomeController(ILogger<HomeController> logger
, IGetSliderService getSliderService
, IGetHomePageImagesService homePageImagesService
, IProductFacad productFacad)
{
_logger = logger;
_getSliderService = getSliderService;
_homePageImagesService = homePageImagesService;
_productFacad = productFacad;
}
این سازنده فیلدهای خصوصی را مقداردهی میکند:
هدف: تزریق وابستگیها (Dependency Injection) و فراهم کردن استفاده از سرویسها و لاگگیری.
اکشن Index
csharp
public IActionResult Index()
{
HomePageViewModel homePage = new HomePageViewModel()
{
Sliders = _getSliderService.Execute().Data,
PageImages = _homePageImagesService.Execute().Data,
Camera = _productFacad.GetProductForSiteService.Execute(Ordering.theNewest
, null, 1, 6, 25).Data.Products,
};
return View(homePage);
}
این متد یک اکشن است که ویوی مربوط به صفحه اصلی را باز میکند:
ایجاد ViewModel صفحه اصلی: دادههای اسلایدرها، تصاویر صفحه اصلی و محصولات (دوربینها) را از سرویسهای مختلف دریافت میکند و در یک ViewModel قرار میدهد.
بازگرداندن ویو: ViewModel صفحه اصلی را به ویو ارسال میکند.
هدف: نمایش دادههای صفحه اصلی به کاربر.
اکشن Privacy
csharp
public IActionResult Privacy()
{
return View();
}
این متد یک اکشن است که ویوی مربوط به صفحه حریم خصوصی را باز میکند:
هدف: نمایش صفحه حریم خصوصی.
اکشن Error
csharp
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
این متد یک اکشن است که در صورت بروز خطا اجرا میشود:
عدم کشسازی پاسخ: استفاده از ResponseCache برای جلوگیری از کشسازی پاسخ.
ایجاد مدل خطا: ایجاد یک شیء ErrorViewModel با شناسه درخواست (RequestId).
بازگرداندن ویو: بازگرداندن ویو خطا همراه با مدل خطا.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
نتیجهگیری
این کنترلر به مدیریت صفحات اصلی سایت میپردازد. شامل اکشنهایی برای نمایش صفحه اصلی، صفحه حریم خصوصی و صفحه خطا میباشد. این کنترلر از سرویسهای مختلف برای دریافت دادههای مربوط به اسلایدرها، تصاویر صفحه اصلی و محصولات استفاده میکند و این دادهها را به ویو ارسال میکند تا به کاربر نمایش داده شوند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
بیایید این بخش از کد ویو Razor برای صفحه اصلی را بررسی کنیم و توضیح دهیم که هر بخش آن چه وظیفهای دارد.
توضیح کد
۱. بخش اسلایدر (slider-box)
کد:
html
<div class="slider-box">
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
@for (int i = 1; i <= Model.Sliders.Count - 1; i++)
{
<li data-target="#carouselExampleIndicators" data-slide-to="@i" ></li>
}
</ol>
<div class="carousel-inner">
@foreach (var item in Model.Sliders)
{
if (_sliderCount == 1)
{
<div class="carousel-item active">
<a href="@item.Link">
<img src="~/@item.Src" class="d-block w-100" alt="...">
</a>
</div>
}
else
{
<div class="carousel-item">
<a href="@item.Link">
<img src="~/@item.Src" class="d-block w-100" alt="...">
</a>
</div>
}
_sliderCount++;
}
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
<span class="fa fa-angle-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
<span class="fa fa-angle-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
توضیح:
ساختار کلی اسلایدر: استفاده از کلاسهای carousel و carousel slide برای ایجاد یک اسلایدر با استفاده از Bootstrap.
carousel-indicators:
نمایش نقاط نمایانگر که نشاندهنده تعداد اسلایدها هستند.
لیست نقاط: استفاده از یک حلقه for برای ایجاد نقاط به ازای تعداد اسلایدها.
carousel-inner: شامل تمام اسلایدها.
@foreach: حلقهای برای ایجاد هر اسلاید.
بررسی اولین اسلاید: اگر اولین اسلاید است، کلاس active به آن اضافه میشود.
تصویر اسلاید: نمایش تصویر هر اسلاید با استفاده از مسیر Src و لینک مرتبط با آن.
۲. نمایش تصاویر تبلیغاتی
کد:
html
<div class="col-lg-3 col-md-4 col-xs-12 pl mt-1">
<div class="adplacement-container-column">
<a href="#" class="adplacement-item">
<div class="adplacement-sponsored-box">
<img src="~/@Model.PageImages.Where(p => p.ImageLocation == ImageLocation.L1)?.FirstOrDefault()?.Src ?? '' ">
</div>
</a>
<a href="#" class="adplacement-item">
<div class="adplacement-sponsored-box">
<img src="~/@Model.PageImages.Where(p => p.ImageLocation == ImageLocation.L2)?.FirstOrDefault()?.Src ?? ''">
</div>
</a>
</div>
</div>
توضیح:
نمایش تصاویر تبلیغاتی در مکانهای L1 و L2:
فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصاویری که محل قرارگیری آنها ImageLocation.L1 و ImageLocation.L2 باشد.
اولین تصویر مناسب: استفاده از FirstOrDefault برای انتخاب اولین تصویر که معیار را برآورده میکند.
مسیر تصویر: استفاده از خاصیت Src برای نمایش تصویر.
۳. بنر تصویر مرکز تمام صفحه
کد:
html
<div class="-container-column mt-4">
<a href="#" class="adplacement-item img-banner">
<div class="adplacement-sponsored-box">
<img src="~/@Model.PageImages.Where(p => p.ImageLocation == ImageLocation.R1)?.FirstOrDefault()?.Src ?? ''">
</div>
</a>
</div>
توضیح:
نمایش تصویر در مکان R1:
فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصویری که محل قرارگیری آن ImageLocation.R1 باشد.
اولین تصویر مناسب: استفاده از FirstOrDefault برای انتخاب اولین تصویر که معیار را برآورده میکند.
مسیر تصویر: استفاده از خاصیت Src برای نمایش تصویر.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
۴. اسلایدر دوربین عکاسی
کد:
html
<div class="one-slider">
<h4>دوربین عکاسی</h4>
<div class="owl-carousel owl-theme ov1">
@foreach (var item in Model.PageImages.Where(p => p.ImageLocation == ImageLocation.G1).ToList())
{
<div class="item">
<figure>
<a href=""><img src="~/@item.Src" class="w-100" /></a>
</figure>
<h5>Adata d5-32G</h5>
<span>112.000 تومان</span>
</div>
}
</div>
</div>
توضیح:
اسلایدر محصولات دوربین عکاسی:
فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصاویری که محل قرارگیری آنها ImageLocation.G1 باشد.
حلقه @foreach: ایجاد اسلایدها به ازای هر تصویر فیلتر شده.
نمایش تصویر: استفاده از خاصیت Src برای نمایش تصویر.
نمایش نام و قیمت محصول: نمایش نمونهای از نام و قیمت محصول به صورت استاتیک.
۵. بنر تصویر تمام صفحه مرکزی
کد:
html
<div class="col-12">
<a href="#" class="adplacement-item mb-4">
<div class="adplacement-sponsored_box">
<img src="~/@Model.PageImages.Where(p => p.ImageLocation == ImageLocation.CenterFullScreen)?.FirstOrDefault()?.Src ?? ''">
</div>
</a>
</div>
توضیح:
نمایش تصویر در مکان CenterFullScreen:
فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصویری که محل قرارگیری آن ImageLocation.CenterFullScreen باشد.
اولین تصویر مناسب: استفاده از FirstOrDefault برای انتخاب اولین تصویر که معیار را برآورده میکند.
مسیر تصویر: استفاده از خاصیت Src برای نمایش تصویر.
۶. اسلایدر محصولات موبایل و تبلت
کد:
html
<div class="two-slider">
<h4>موبایل و تبلت</h4>
<div class="owl-carousel owl-theme ov2">
@foreach (var item in Model.PageImages.Where(p => p.ImageLocation == ImageLocation.G2).ToList())
{
<div class="item">
<figure>
<a href=""><img src="~/@item.Src" class="w-100" /></a>
</figure>
<h5>Adata d5-32G</h5>
<span>112.000 تومان</span>
</div>
}
</div>
</div>
توضیح:
اسلایدر محصولات موبایل و تبلت:
فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصاویری که محل قرارگیری آنها ImageLocation.G2 باشد.
حلقه @foreach: ایجاد اسلایدها به ازای هر تصویر فیلتر شده.
نمایش تصویر: استفاده از خاصیت Src برای نمایش تصویر.
نمایش نام و قیمت محصول: نمایش نمونهای از نام و قیمت محصول به صورت استاتیک.
نتیجهگیری
این کد ویو برای صفحه اصلی شامل نمایش اسلایدر اصلی، تصاویر تبلیغاتی و بنرها، و اسلایدرهای محصولات مختلف است. از کلاسهای Bootstrap و Owl Carousel برای استایلدهی و ایجاد کاروسلها استفاده میکند. دادهها از مدل ViewModel دریافت میشوند و به صورت داینامیک در صفحه نمایش داده میشوند.
Test_Store 14.zip
حجم:
56.5M
ادامه درس بخش صفحه اصلی پویا
که خودم اعتبار سنجی کردم بدونه کمک استاد که دیگران نگویند پروژه خطا میده
کوکی cookie
سلام! بیایید ابتدا توضیح دهیم که کوکی چیست و سپس نحوه استفاده از کوکیها در ASP.NET را بررسی کنیم.
کوکی چیست؟
کوکی یک فایل کوچک متنی است که توسط وبسایتها در مرورگر کاربر ذخیره میشود. این فایلها شامل اطلاعاتی مانند تنظیمات کاربر، وضعیت نشست (session)، و شناسههای کاربری هستند. کوکیها برای ذخیرهسازی اطلاعات کاربر بین درخواستهای مختلف به سرور استفاده میشوند.
نحوه استفاده از کوکیها در ASP.NET
۱. ایجاد و تنظیم کوکی
برای ایجاد و تنظیم یک کوکی در ASP.NET، میتوان از شیء HttpCookie استفاده کرد و سپس آن را به پاسخ HTTP اضافه کرد.
نمونه کد:
csharp
public ActionResult SetCookie()
{
HttpCookie cookie = new HttpCookie("UserPreferences");
cookie["Theme"] = "Dark";
cookie["Font"] = "Arial";
cookie.Expires = DateTime.Now.AddDays(7); // زمان انقضای کوکی (مثلاً ۷ روز)
Response.Cookies.Add(cookie);
return RedirectToAction("Index");
}
۲. خواندن کوکی
برای خواندن یک کوکی در ASP.NET، میتوان از شیء HttpRequest و مجموعه Request.Cookies استفاده کرد.
نمونه کد:
csharp
public ActionResult GetCookie()
{
HttpCookie cookie = Request.Cookies["UserPreferences"];
if (cookie != null)
{
string theme = cookie["Theme"];
string font = cookie["Font"];
ViewBag.Theme = theme;
ViewBag.Font = font;
}
return View();
}
۳. حذف کوکی
برای حذف یک کوکی، باید تاریخ انقضای کوکی را به گذشته تنظیم کنید. این کار باعث میشود که مرورگر کوکی را حذف کند.
نمونه کد:
csharp
public ActionResult RemoveCookie()
{
if (Request.Cookies["UserPreferences"] != null)
{
HttpCookie cookie = new HttpCookie("UserPreferences");
cookie.Expires = DateTime.Now.AddDays(-1); // تاریخ انقضا به گذشته تنظیم شده
Response.Cookies.Add(cookie);
}
return RedirectToAction("Index");
}
گزینههای کوکی (Cookie Options)
هنگام ایجاد یک کوکی، میتوان گزینههای مختلفی را تنظیم کرد مانند زمان انقضا، دامنه، مسیر، و امنیت.
نمونه کد با گزینههای کوکی:
csharp
public ActionResult SetCookieWithOptions()
{
HttpCookie cookie = new HttpCookie("UserPreferences")
{
["Theme"] = "Dark",
["Font"] = "Arial",
Expires = DateTime.Now.AddDays(7), // زمان انقضای کوکی (مثلاً ۷ روز)
Path = "/", // مسیر کوکی
Domain = "example.com", // دامنه کوکی
Secure = true, // فقط از طریق HTTPS
HttpOnly = true // فقط از طریق HTTP، دسترسی جاوااسکریپت محدود
};
Response.Cookies.Add(cookie);
return RedirectToAction("Index");
}
نتیجهگیری
با استفاده از این روشها، میتوانید کوکیها را در ASP.NET مدیریت کنید. کوکیها ابزاری قوی برای ذخیره اطلاعات کاربر در مرورگر هستند و میتوانند تجربه کاربری بهتری را فراهم کنند.
اگر به یک کوکی تاریخ انقضا ندهید، به طور پیشفرض به عنوان یک کوکی نشست (session cookie) در نظر گرفته میشود. این بدان معناست که کوکی تا زمانی که مرورگر باز باشد معتبر خواهد بود و هنگامی که مرورگر بسته شود، کوکی به طور خودکار حذف میشود.
نمونه کد:
csharp
public ActionResult SetCookieWithoutExpiration()
{
HttpCookie cookie = new HttpCookie("UserPreferences");
cookie["Theme"] = "Dark";
cookie["Font"] = "Arial";
// تاریخ انقضا تنظیم نمیشود، بنابراین به عنوان کوکی نشست در نظر گرفته میشود
Response.Cookies.Add(cookie);
return RedirectToAction("Index");
}
در این مثال، کوکیای که ایجاد شده است تا زمانی که مرورگر باز باشد معتبر خواهد بود و پس از بستن مرورگر، کوکی حذف میشود.
Test_Store 15.zip
حجم:
56.9M
افزودن به سبد خرید قسمت اول
پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
این کد مربوط به سرویس سبد خرید (CartService) در یک فروشگاه اینترنتی است. سرویس سبد خرید شامل عملکردهایی برای اضافه کردن محصول به سبد خرید، حذف محصول از سبد خرید، دریافت سبد خرید کاربر، افزایش تعداد یک محصول در سبد خرید و کاهش تعداد یک محصول در سبد خرید میباشد. بیایید نگاهی دقیقتر به عملکردهای مختلف این سرویس بیندازیم:
تعریف Interface (رابط) ICartService
csharp
public interface ICartService
{
ResultDto AddToCart(long ProductId, Guid BrowserId);
ResultDto RemoveFromCart(long ProductId, Guid BrowserId);
ResultDto<CartDto> GetMyCart(Guid BrowserId);
ResultDto Add(long CartItemId);
ResultDto LowOff(long CartItemId);
}
کلاس CartService
سازنده و زمینههای کلاس
csharp
public class CartService : ICartService
{
private readonly IDataBaseContext _context;
public CartService(IDataBaseContext context)
{
_context = context;
}
IDataBaseContext
از پایگاه داده استفاده میکند و عملیاتهای دادهای را فراهم میکند.
سازنده کلاس، نمونهای از IDataBaseContext را دریافت کرده و آن را در متغیر _context ذخیره میکند.
افزودن محصول به سبد خرید
csharp
public ResultDto AddToCart(long ProductId, Guid BrowserId)
{
var cart = _context.Carts.Where(p => p.BrowserId == BrowserId && p.Finished == false).FirstOrDefault();
if (cart == null)
{
Cart newCart = new Cart()
{
Finished = false,
BrowserId = BrowserId,
};
_context.Carts.Add(newCart);
_context.SaveChanges();
cart = newCart;
}
var product = _context.Products.Find(ProductId);
var cartItem = _context.CartItems.Where(p => p.ProductId == ProductId && p.CartId == cart.Id).FirstOrDefault();
if (cartItem != null)
{
cartItem.Count++;
}
else
{
CartItem newCartItem = new CartItem()
{
Cart = cart,
Count = 1,
Price = product.Price,
Product = product,
};
_context.CartItems.Add(newCartItem);
_context.SaveChanges();
}
return new ResultDto()
{
IsSuccess = true,
Message = $"محصول {product.Name} با موفقیت به سبد خرید شما اضافه شد",
};
}
ابتدا بررسی میشود که آیا سبد خریدی برای کاربر موجود است یا نه. اگر سبد خریدی وجود ندارد، یک سبد خرید جدید ایجاد میشود.
سپس محصول مورد نظر در پایگاه داده جستجو میشود.
اگر محصولی با شناسه مورد نظر در سبد خرید وجود داشته باشد، تعداد آن افزایش مییابد. در غیر این صورت، محصول جدیدی به سبد خرید اضافه میشود.
افزایش تعداد یک محصول در سبد خرید
csharp
public ResultDto Add(long CartItemId)
{
var cartItem = _context.CartItems.Find(CartItemId);
cartItem.Count++;
_context.SaveChanges();
return new ResultDto()
{
IsSuccess = true,
};
}
محصول مورد نظر در سبد خرید بر اساس CartItemId جستجو میشود و تعداد آن افزایش مییابد.
کاهش تعداد یک محصول در سبد خرید
csharp
public ResultDto LowOff(long CartItemId)
{
var cartItem = _context.CartItems.Find(CartItemId);
if (cartItem.Count <= 1)
{
return new ResultDto()
{
IsSuccess = false,
};
}
cartItem.Count--;
_context.SaveChanges();
return new ResultDto()
{
IsSuccess = true,
};
}
محصول مورد نظر در سبد خرید بر اساس CartItemId جستجو میشود و تعداد آن کاهش مییابد. اگر تعداد محصول کمتر یا برابر با ۱ باشد، عملیات کاهش ناموفق خواهد بود.