You are on page 1of 10

ASP.

NET Core

Lab06: Entity Framework (tt)


Sử dụng mô hình EF Core hướng Database First để có dữ liệu thực hiện các yêu cầu sau:

1 Tìm kiếm hàng hóa

Tìm các mặt hàng có tên chứa tên và giá trong khoảng giá nhập vào. Nếu không nhập một
hoặc nhiều ô sẽ bỏ qua.

Hướng dẫn:

Tạo action Search() trong HangHoasController tiếp nhận 3 tham số Name (tên cần tìm), Min
(giá nhỏ nhất), Max (giá lớn nhất). Sử dụng LINQ để truy tìm các mặt hàng có tên chứa tên
nhập vào, giá trong khoảng giá nhập vào và chuyển kết quả tìm kiếm cho view Search.cshtml
để hiển thị.

Hãy chú ý câu lệnh truy vấn LINQ: _context.HangHoas .Where(p =>
p.TenHH.Contains(Name) && p.DonGia >= Min && p.DonGia <= Max

public ActionResult Search(string Name = "", double Min =


double.MinValue, double Max = double.MaxValue)
{
var list = _context.HangHoa
.Where(p => p.TenHh.Contains(Name) && p.DonGia >= Min &&
p.DonGia <= Max).ToList();
return View(list);
}

Nội dung View:

@model IEnumerable<D14_EFCore.Models.HangHoa>

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 1


ASP.NET Core

@{
ViewData["Title"] = "Search";
}

<fieldset>
<legend>Tìm kiếm</legend>
<form>
<text>Name: </text><input name="Name"/>
<text>Min Price: </text><input name="Min" type="number" step="0.01"
min="0" />
<text>Max Price: </text><input name="Min" type="number" step="0.01"
min="0" />
<button>Search</button>
</form>
</fieldset>

<h2>Kết quả tìm kiếm</h2>


<table class="table table-hover">
<tr>
<th>Mã</th>
<th>Tên</th>
<th>Giá</th>
<th>Ngày SX</th>
<th>Loại</th>
<th>Nhà cung cấp</th>
</tr>
@foreach (var p in Model)
{
<tr>
<td>@p.MaHh</td>
<td>@p.TenHh</td>
<td>@Html.FormatValue(p.DonGia, "{0:c}")</td>
<td>@Html.FormatValue(p.NgaySx, "{0:dd-MM-yyyy}")</td>
<td>@p.MaLoaiNavigation.TenLoai</td>
<td>@p.MaNccNavigation.TenCongTy</td>
</tr>
}
</table>

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 2


ASP.NET Core

2 Thống kê số liệu và vẽ biểu đồ

3 Phân trang

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 3


ASP.NET Core

4 Xây dựng Layout chính

Trong bài này ban sẽ phải hoàn thiện mã để hiển thị dữ liệu đầy đủ cho một số PartialView
của Layout chính. Cụ thể bạn phải hiển thị chủng loại trên _Category.cshtml, nhà cung cấp
trên _Supplier.cshtml và 3 math hàng ngẫu nhiên trên _Promotion.cshtml. Sau đây là các
PartailView đã được cấp dữ liệu đầy đủ.

5 Xây dựng trang chủ

Yêu cầu của trang chủ gồm 2 phần sản phẩm ngẫu nhiên và 3 loại hàng ngẫu nhiên cùng với 5
sản phẩm của mỗi loại được trình bày như sau

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 4


ASP.NET Core

6 Session

6.1 Cấu hình service:


// This method gets called by the runtime. Use this method to add services to the
container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSession();
}

// This method gets called by the runtime. Use this method to configure the HTTP
request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseSession();
app.UseStaticFiles();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

Mặc định Session chỉ lưu kiểu chuỗi, số, do đó để lưu [mảng] đối tượng cần viết phương thức Set/Get
dạng extension. Tạo lớp SessionHelper có 2 phương thức extension:

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 5


ASP.NET Core

public static class SessionHelper


{
public static void Set<T>(this ISession session, string key, T value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}

public static T Get<T>(this ISession session, string key)


{
var value = session.GetString(key);

return value == null ? default(T) :


JsonConvert.DeserializeObject<T>(value);
}
}

6.2 Tạo action:


Ở action trong controller cần gán giá trị cho Session dùng lệnh:

HttpContext.Session.SetString(“ten”, “gia-tri”);

HttpContext.Session.SetInt32(“ten”, gia-tri);

HttpContext.Session.Set<T>(“ten”, doi-tuong);

Ví dụ:

public IActionResult DemoSession()


{
HttpContext.Session.SetString("message", "Trung tâm Đào tạo CNTT Nhất Nghệ");
HttpContext.Session.SetInt32("year", 2003);

HangHoa hh = new HangHoa


{
MaHH = 1,
TenHH = "Samsung Note 9 128GB",
DonGia = 22490000,
SoLuong = 23,
Hinh = "samsung-note9.jpg"
};
HttpContext.Session.Set("product", hh);

return View();
}

6.3 Màn hình view hiển thị:


@using Microsoft.AspNetCore.Http

<h3>@Context.Session.GetString("message") - Năm thành lập:


@Context.Session.GetInt32("year")</h3>
@{
HangHoa hh = Context.Session.Get<HangHoa>("product");
}
<h2>Thông tin Sản phẩm</h2>
<table class="table-condensed">

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 6


ASP.NET Core

<tr>
<td>Mã</td>
<td>@hh.MaHH</td>
</tr>
<tr>
<td>Tên</td>
<td>@hh.TenHH</td>
</tr>
<tr>
<td>Đơn giá</td>
<td>@hh.DonGia.ToString("#,##0") đ</td>
</tr>
<tr>
<td>Số lượng</td>
<td>@hh.SoLuong</td>
</tr>
<tr>
<td>Hình</td>
<td>
<img src="~/images/@hh.Hinh" />
</td>
</tr>
</table>

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 7


ASP.NET Core

7 Thực hiện Login/Logout với Session

7.1 Mô tả tình huống sử dụng


Menu chính lúc chưa đăng nhập:

Bấm menu đăng nhập:

Đã đăng nhập:

7.2 Viết các action liên quan


Tạo controller Member thực hiện việc Login/Logout ứng dụng.

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 8


ASP.NET Core

public IActionResult Login()


{
return View();
}

[HttpPost]
public IActionResult Login(LoginViewModel model)
{
//Kiểm tra xem mã người dùng có hợp lệ không?
if (model.MaKH.Length > 5 && model.MatKhau.Length > 5)
{
KhachHang kh = new KhachHang
{
MaKh = model.MaKH,
HoTen = model.MaKH,
MatKhau = model.MatKhau
};
HttpContext.Session.Set("KhachHang", kh);
return RedirectToAction("Index", "Home");
}
else
{
ViewBag.Loi = "Sai thông tin đăng nhập";
return View();
}
}
public IActionResult Logout()
{
HttpContext.Session.Remove("KhachHang");
return RedirectToAction("Index", "Home");
}

7.3 LoginViewModel
public class LoginViewModel
{
[Display(Name = "Mã khách hàng")]
[MaxLength(50)]
public string MaKH { get; set; }
[Display(Name = "Mật khẩu")]
[MaxLength(50)]
[DataType(DataType.Password)]
public string MatKhau { get; set; }
}

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 9


ASP.NET Core

7.4 Hiển thị phần menu ngang

8 Tạo giỏ hàng dùng Session

ThS. Lương Trần Hy Hiến, Khoa CNTT, ĐH Sư phạm TpHCM 10

You might also like