ThS. CNTT: Nguyễn Nghiệm – nghiemn@fpt.edu.vn Trang 1
BÀI 7: TÌM KIẾM HÀNG HÓA
MỤC TIÊU
Biết cách xây dựng trang Action tiếp nhận và phân biệt tham số vào để xây dựng kết quả tìm
kiếm phù hợp với điều kiện mong muốn.
MÔ TẢ
Trong bài này bạn phải hiệu chỉnh mã nguồn của Action Search trong ProductController để có thể tiếp
nhận các yêu cầu từ:
Nhấp 1 loại: xem hàng theo chủng loại
Nhấp 1 nhà cung cấp: xem hàng theo nhà cung cấp
Nhấp chuỗi tìm kiếm: xem hàng có tên chứa chuỗi tìm kiếm
Tìm theo tên
Tìm theo loại
Tìm theo nhà cung cấp
Sau đây là trang hàng hóa khi nhấp liên kết chủng loại Cameras
ThS. CNTT: Nguyễn Nghiệm – nghiemn@fpt.edu.vn Trang 2
THỰC HIỆN
Bước 1: Hoàn thiện _Search.cshtml
Bước 2: Nâng cấp mã Action Search của ProductController
Bước 1: Hoàn thiện _Search.cshtml
Mở _Search.cshtml trong Views/Shared và hoàn thiện mã nguồn như sau để khi submit form sẽ gọi
action Search() của ProductController và truyền theo tham số Search.
<div class="art-vmenublock clearfix">
<div class="art-vmenublockheader">
<h3 class="t">Search</h3>
</div>
<div class="art-vmenublockcontent nn-search">
<form action="/Product/Search">
@Html.TextBox("Search")
</form>
</div>
</div>
ThS. CNTT: Nguyễn Nghiệm – nghiemn@fpt.edu.vn Trang 3
Bạn cũng đã hoàn thiện Layout với _Category.cshtml và _Supplier.cshtml cũng gọi về action Search() của
ProductController với các mẫu liên kết:
<a href="/Product/Search?CategoryId=@c.Id">@c.Name</a>
<a href="/Product/Search?SupplierId=@s.Id">@s.Name</a>
Bước 2: Nâng cấp mã Action Search của ProductController
Để tạo ra kết quả tìm kiếm khác nhau dựa vào tham số yêu cầu (Search, CategoryId và SupplierId), bạn
cần hiệu chỉnh mã của action Search() như sau:
public ActionResult Search()
{
if (Request["CategoryId"] != null) // tìm theo loại
{
int CategoryId = int.Parse(Request["CategoryId"]);
Session["products"] = db.Products
.Where(p => p.CategoryId == CategoryId).ToList();
}
else if (Request["SupplierId"] != null) // tìm theo nhà cung cấp
{
String SupplierId = Request["SupplierId"];
Session["products"] = db.Products
.Where(p => p.SupplierId == SupplierId).ToList();
}
else if (Request["Search"] != null) // tìm theo tên
{
String Search = Request["Search"];
Session["products"] = db.Products
.Where(p => p.Name.Contains(Search)).ToList();
}
else if(Session["products"] == null)
{
Session["products"] = db.Products.ToList();
}
var products = Session["products"] as List<Product>;
var pager = Pager.Set("pager1", 6, 5, products.Count);
return View(products.Skip(pager.StartRow).Take(pager.PageSize));
}
Mã của action cũng duy trì kết quả tìm kiếm trong Session để khi chuyển trang không bị mất điều kiện
tìm kiếm.