Lập trình

Xây dựng website bán hàng với asp.net core mvc (Phần 2)

Tác giả: ThienKhang
Ngày: 5/10/2025 10:20:20 PM
Lượt xem: 36

Ở phần 2 này chúng ta sẽ thực hiện CRUD (Thêm xóa sửa) để quản lý danh mục và sản phẩm


Lập trình các chức năng CRUD để quản lý danh mục Categories

  Giao diện quản lý thể loại

1) Tạo CategoryControlller và hiệu chỉnh code để lập trình các chức năng quản lý Category

 public class CategoryController : Controller
{
    private readonly ApplicationDbContext _db;
    public CategoryController(ApplicationDbContext db)
    {
        _db = db;
    }
    //Hiển thị danh sách chủng loại
    public IActionResult Index()
    {
        var listCategory = _db.Categories.ToList();
        return View(listCategory);
    }
    //Hiển thị form thêm mới chủng loại
    public IActionResult Add()
    {
        return View();
    }
    // Xử lý thêm chủng loại mới
    [HttpPost]
    public IActionResult Add(Category category)
    {
        if (ModelState.IsValid) //kiem tra hop le
        {
            //thêm category vào table Categories
            _db.Categories.Add(category);
            _db.SaveChanges();
           // LAB 02
        
   TempData["success"] = "Category inserted success";
            return RedirectToAction("Index");
        }
        return View();
    }
    //Hiển thị form cập nhật chủng loại
    public IActionResult Update(int id)
    {
        var category = _db.Categories.Find(id);
        if (category == null)
        {
            return NotFound();
        }
        return View(category);
    }
    // Xử lý cập nhật chủng loại
    [HttpPost]
    public IActionResult Update(Category category)
    {
        if (ModelState.IsValid) //kiem tra hop le
        {
            //cập nhật category vào table Categories
            _db.Categories.Update(category);
            _db.SaveChanges();
            TempData["success"] = "Category updated success";
            return RedirectToAction("Index");
        }
        return View();
    }
    //Hiển thị form xác nhận xóa chủng loại
    public IActionResult Delete(int id)
    {
        var category = _db.Categories.FirstOrDefault(x => x.Id == id);
        if (category == null)
        {
            return NotFound();
        }
        return View(category);
    }
    // Xử lý xóa chủng loại
    public IActionResult DeleteConfirmed(int id)
    {
        var category = _db.Categories.Find(id);
        if (category == null)
        {
            return NotFound();
        }
        _db.Categories.Remove(category);
        _db.SaveChanges();
        TempData["success"] = "Category deleted success";
        return RedirectToAction("Index");
    }

    //
}

2) Tạo ProductControlller và hiệu chỉnh code để lập trình các chức năng quản lý Product

Lưu ý : Tạo hàm upload ảnh và tạo folder trong www.root image

 public class ProductController : Controller
{
    private readonly ApplicationDbContext _db;
    private readonly IHostingEnvironment _hosting;
    public ProductController(ApplicationDbContext db, IHostingEnvironment hosting)
    {
        _db = db;
        _hosting = hosting;
    }
    //Hiển thị danh sách sản phẩm
    public IActionResult Index(int ?page,string search="")
    {

        var pageIndex = (int)(page != null ? page : 1);
        var pageSize = 3;
        var productList = _db.Products.Include(x => x.Category).Where(i=>i.Name.ToLower().Contains(search.ToLower())).ToList();
        // Thống kê số trang
        var pageSum =productList.Count()/pageSize +(productList.Count()%pageSize>0?1:0);
        // Truyền dữ liệu cho View
        ViewBag.PageSum = pageSum;
        ViewBag.PageIndex = pageIndex;
        return View(productList.Skip((pageIndex-1)*pageSize).Take(pageSize).ToList());
    }
    //Hiển thị form thêm sản phẩm mới
    public IActionResult Add()
    {
        //truyền danh sách thể loại cho View để sinh ra điều khiển DropDownList
        ViewBag.CategoryList = _db.Categories.Select(x => new SelectListItem
        {
            Value = x.Id.ToString(),
            Text = x.Name
        });
        return View();
    }
    //Xử lý thêm sản phẩm
    [HttpPost]
    public IActionResult Add(Product product, IFormFile ImageUrl)
    {
        if (ModelState.IsValid) //kiem tra hop le
        {
            if (ImageUrl != null)
            {
                //xu ly upload và lưu ảnh đại diện
                product.ImageUrl = SaveImage(ImageUrl);
            }
            //thêm product vào table Product
            _db.Products.Add(product);
            _db.SaveChanges();
            TempData["success"] = "Product inserted success";
            return RedirectToAction("Index");
        }
        ViewBag.CategoryList = _db.Categories.Select(x => new SelectListItem
        {
            Value = x.Id.ToString(),
            Text = x.Name
        });
        return View();
    }
    //Hiển thị form cập nhật sản phẩm
    public IActionResult Update(int id)
    {
        var product = _db.Products.Find(id);
        if (product == null)
        {
            return NotFound();
        }
        //truyền danh sách thể loại cho View để sinh ra điều khiển DropDownList
        ViewBag.CategoryList = _db.Categories.Select(x => new SelectListItem
        {
            Value = x.Id.ToString(),
            Text = x.Name
        });
        return View(product);
    }
    //Xử lý cập nhật sản phẩm
    [HttpPost]
    public IActionResult Update(Product product, IFormFile ImageUrl)
    {
        if (ModelState.IsValid) //kiem tra hop le
        {
            var existingProduct = _db.Products.Find(product.Id);
            if (ImageUrl != null)
            {
                //xu ly upload và lưu ảnh đại diện mới
                product.ImageUrl = SaveImage(ImageUrl);

                //xóa ảnh cũ (nếu có)

                if (!string.IsNullOrEmpty(existingProduct.ImageUrl))
                {
                    var oldFilePath = Path.Combine(_hosting.WebRootPath,existingProduct.ImageUrl);
                    if (System.IO.File.Exists(oldFilePath))
                    {
                        System.IO.File.Delete(oldFilePath);
                    }
                }
            }
            else

            {
                product.ImageUrl = existingProduct.ImageUrl;
            }
            //cập nhật product vào table Product
            existingProduct.Name = product.Name;
            existingProduct.Description = product.Description;
            existingProduct.Price = product.Price;
            existingProduct.CategoryId = product.CategoryId;
            existingProduct.ImageUrl = product.ImageUrl;
            _db.SaveChanges();
            TempData["success"] = "Product updated success";
            return RedirectToAction("Index");
        }
        ViewBag.CategoryList = _db.Categories.Select(x => new SelectListItem
        {
            Value = x.Id.ToString(),
            Text = x.Name
        });
        return View();
    }
    private string SaveImage(IFormFile image)
    {
        //đặt lại tên file cần lưu
        var filename = Guid.NewGuid().ToString() + Path.GetExtension(image.FileName);
        //lay duong dan luu tru wwwroot tren server
        var path = Path.Combine(_hosting.WebRootPath, @"images/products");
        var saveFile = Path.Combine(path, filename);
        using (var filestream = new FileStream(saveFile, FileMode.Create))
        {
            image.CopyTo(filestream);
        }
        return @"images/products/" + filename;
    }
    //Hiển thị form xác nhận xóa sản phẩm
    public IActionResult Delete(int id)
    {
        var product = _db.Products.Find(id);
        if (product == null)
        {
            return NotFound();
        }
        return View(product);
    }
    //Xử lý xóa sản phẩm , ActionName("Delete")
    [HttpPost, ActionName("Delete")]
    public IActionResult DeleteConfirmed(int id)
    {
        var product = _db.Products.Find(id);
        if (product == null)
        {
            return NotFound();
        }
        // xoá hình cũ của sản phẩm
        if (!String.IsNullOrEmpty(product.ImageUrl))
        {
            var oldFilePath = Path.Combine(_hosting.WebRootPath, product.ImageUrl);
            if (System.IO.File.Exists(oldFilePath))
            {
                System.IO.File.Delete(oldFilePath);

            }
        }
        // xoa san pham khoi CSDL
        _db.Products.Remove(product);
        _db.SaveChanges();
        TempData["success"] = "Product deleted success";
        //chuyen den action index
        return RedirectToAction("Index");
    }
}

📢 Chia sẻ bài viết:


Tin liên quan

Bình luận
ThienKhang 5/11/2025 12:12:07 PM

hahaaaa