Lập trình
Xây dựng website bán hàng với asp.net core mvc (Phần 2)
Ở 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");
}
}
Tin liên quan
Tin nổi bật
Bình luận
hahaaaa