Asp net bai 12 decuong statemanagement

21 0 0
Asp net   bai 12 decuong statemanagement

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng chi tiết môn học lập trình ASP.Net Bài học cung cấp kiến thức cơ sở lý thuyết tổng quan về ASP.NET, kiến trúc ASP.NET, Code phía server, cách thức truyền dữ liệu giữa các trang, chuyển trang. Sau khi học xong bài học này sinh viên có thể xây dựng được các trang Web Form sử dụng điều khiển Html, Server và biết cách truyền dữ liệu giữa các trang Web

HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET BÀI 12 QUẢN LÝ TRẠNG THÁI Nội dung học: Quản lý trạng thái phía Client 1.1 Hidden field 1.2 Cookies 1.3 Query Strings 1.4 ViewBag 1.5 TempData Quản lý trạng thái phía Server 2.1 Session 2.2 Profile properties 2.3 Caching Demo sử dụng Session Demo sử dụng Application 10 Demo login vào hệ thống 11 Hướng dẫn tập Mua bán hàng online 15 Quản lý trạng thái phía Client Trong quản lý trang phía máy khách, thơng tin lưu trữ hệ thống máy khách Thông tin truyền qua lại với request response đến từ máy chủ *Ưu điểm: Tiết kiệm nhớ máy chủ Chúng giải phóng máy chủ khỏi gánh nặng lưu giữ thơng tin liên quan đến trạng thái *Nhược điểm: Cần nhiều băng thơng lượng liệu đáng kể truyền qua lại Do đó, trang web tải chậm Vấn đề tạo vấn đề bảo mật cho thông tin nhạy cảm mật khẩu, số thẻ tín dụng, v.v Học kết hợp Trang HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET ASP.NET cung cấp các phương pháp bảo tồn trạng thái trang web phía máy khách sau: • • • • • • • • Hidden Field View State (Không hỗ trợ MVC ) Cookies Control State (Không hỗ trợ MVC ) Query Strings View Data (chỉ có MVC ) View Bag (chỉ có MVC ) Temp Data (chỉ có MVC ) 1.1 Hidden field Hidden field sử dụng để lưu trữ lượng nhỏ liệu hệ thống máy khách Đây cách thích hợp giá trị biến thay đổi thường xuyên Hạn chế hidden field giữ thơng tin đăng HTTP thực Nó khơng hoạt động với HTTP get Ví dụ để lưu trữ hidden field trang xem MVC sau: Mvc4DemoProject.Models.User @Html.HiddenFor(m => m.Id) 1.2 Cookies Cookie tệp văn nhỏ tạo máy chủ trình duyệt lưu trữ đĩa cứng máy khách Nó khơng sử dụng nhớ máy chủ Nói chung cookie sử dụng để xác định người dùng Khi người dùng gửi yêu cầu đến máy chủ, máy chủ tạo cookie đính kèm tiêu đề gửi lại cho người dùng với phản hồi Trình duyệt chấp nhận cookie lưu trữ máy khách vĩnh viễn tạm thời Lần người dùng đưa request cho trang web, trình duyệt kiểm tra tồn cookie cho trang web thư mục Nếu cookie tồn tại, gửi yêu cầu với cookie, khơng request coi request Có loại cookie • Để lấy cookie: HttpCookie cookie = HttpContext.Request.Cookies.Get("cookie_name"); • Để kiểm tra có cookie hay không: Học kết hợp Trang HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET HttpContext.Request.Cookies["cookie_name"] != null • Để lưu trữ cookie: HttpCookie cookie = new HttpCookie("cookie_name"); HttpContext.Response.Cookies.Remove("cookie_name"); HttpContext.Response.SetCookie(cookie ) Persistence : cookie lưu trữ vĩnh viễn hết thời gian đặt Non-Persistence: cookie không lưu trữ vĩnh viễn hệ thống người dùng Khi người dùng đóng trình duyệt, cookie bị xóa public ActionResult NonPersistenceCookie() { HttpCookie cookie = new HttpCookie(“MyCookie”); cookie.Value = “Hello Cookie! CreatedOn: “ + DateTime.Now.ToShortTimeString(); this.ControllerContext.HttpContext.Response.Cookies.Add(cookie); return RedirectToAction(“Index”, “Home”); } public ActionResult PersistenceCookie() { if(this.ControllerContext.HttpContext.Request.Cookies.AllKeys.Contains(“MyCookie”)) { HttpCookie cookie = this.ControllerContext.HttpContext.Request.Cookies[“MyCookie”]; cookie.Expires = DateTime.Now.AddSeconds(10); this.ControllerContext.HttpContext.Response.Cookies.Add(cookie); } return RedirectToAction(“Index”, “Home”); } Lưu ý: Số lượng cookie phép thay đổi tùy theo trình duyệt Hầu hết trình duyệt cho phép 20 cookie máy chủ thư mục đĩa cứng máy khách kích thước cookie khơng KB liệu 1.3 Query Strings Một Query String (chuỗi truy vấn) biến chuỗi nối vào cuối URL trang Nó sử dụng để gửi liệu qua trang Nó lưu trữ thơng tin cặp khóa / giá trị Dấu “?” chữ ký sử dụng để nối khóa giá trị vào URL trang Trong ứng dụng MVC, chuyển giá trị query string với id tham số tuyến đường sau: http://MyDomain/product/Edit/1?name=Mobile File action có dạng sau: public ActionResult Edit(int id,string name) { //To Do return View(); Học kết hợp Trang HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET } Lưu ý: Hầu hết trình duyệt đặt giới hạn 255 ký tự cho độ dài URL Chúng ta nên mã hóa giá trị truy vấn ViewData : ViewData đối tượng từ điển có dẫn xuất từ class ViewDataDictionary Nó truy cập cách sử dụng chuỗi dạng key/value sau: public ActionResult Index() { ViewData[“hasPermission”] = true; return View(); } ViewData nằm request từ controller đến view tương ứng Nếu có chuyển hướng giá trị trở thành null Nó yêu cầu có chuyển kiểu nhận liệu view: @{ bool hasPermission = (bool)ViewData[“hasPermission”]; } 1.4 ViewBag Đối tượng ViewBag thuộc tính động bao bọc xung quanh đối tượng ViewData Thuộc tính động tính Ngơn ngữ động ASP.NET Chúng ta đơn giản cần đặt thuộc tính động cho ViewBag controller public ActionResult Index() { ViewBag.HasPermission = true; return View(); } ViewBag tồn request từ controller tới view Nếu có chuyển hướng giá trị trở thành null ViewBag không yêu cầu chuyển kiểu để nhận liệu view @if(ViewBag.HasPermission) { //do somethings… } * Lưu ý: Cả ViewData ViewBag gần tương tự giúp trì liệu Chúng cung cấp cách để giao tiếp controller view Học kết hợp Trang HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET 1.5 TempData • TempData đối tượng từ điển lưu trữ liệu dạng cặp khóa / giá trị có dẫn xuất từ class TempDataDictionary TempData Giúp trì liệu di chuyển từ controller tới controller khác từ action tới action khác • Nói cách khác, giúp trì liệu lần chuyển hướng • RedirectToAction không ảnh hưởng đến TempData TempData đọc Sau TempData đọc, giá trị bị public class ViewController : Controller { public ActionResult Index() { TempData[“MyData”] = “Hello! Wecome”; return RedirectToAction(“About”); } public ActionResult About() { return RedirectToAction(“Test1”); } public ActionResult Test1() { string Str = Convert.ToString(TempData[“MyData”]); TempData.Keep(); // Keep TempData return RedirectToAction(“Test2”); } public ActionResult Test2() { string Str = Convert.ToString(TempData[“MyData”]); //OutPut return View(); } } *Lưu ý: Phương thức TempData.Keep () sử dụng để lưu trữ liệu controller đến thời điểm mong muốn Quản lý trạng thái phía Server Trong quản lý trạng thái phía máy chủ, chúng lưu trữ tất thơng tin nhớ máy chủ Ưu điểm: Ưu điểm việc quản lý trạng thái kiểu bảo mật thơng tin nhạy cảm bí mật người dùng Học kết hợp Trang HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET Nhược điểm: Nhược điểm của việc quản lý trạng thái phía server sử dụng nhiều nhớ máy chủ ASP.NET cung cấp các phương pháp bảo toàn trạng thái trang web phía máy chủ sau: • Session state • Application state • Profile Properties • Cache Ngoài phương pháp quản lý trạng thái trên, số phương pháp không ứng dụng ASP.NET MVC hỗ trợ view state, control, v.v Và số phương pháp áp dụng ứng dụng MVC 2.1 Session • Trong ASP.NET MVC, Session quản lý để lưu trữ truy xuất giá trị cho người dùng người dùng điều hướng chế độ view Nói chung, session sử dụng để lưu trữ thông tin người dùng, để xác định người dùng • Máy chủ trì trạng thái thơng tin người dùng cách sử dụng ID session Khi người dùng đưa request mà khơng có ID session, ASP.NET tạo ID session gửi với request response cho người dùng • Trạng thái session lưu trữ cặp khóa/giá trị // Model namespace MvcSessionApp.Models { public class UserAccount { public string UserName { get; set; } public string UserType { get; set; } public string Email { get; set; } } } //Controller namespace MvcSessionApp.Controllers { public class UserAccountController : Controller { // // GET: /UserAccount/ public ActionResult Index() { UserAccount ucObj = new UserAccount(); ucObj.UserName = “Biswa”; ucObj.UserType = “Admin”; Học kết hợp Trang HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET ucObj.Email = “biswa@session.com”; Session[“AdminUser”] = ucObj; return View(); } } } //View @model MvcSessionApp.Models.UserAccount @{ ViewBag.Title = “Index”; } @{ var user = (MvcSessionApp.Models.UserAccount)Session[“AdminUser”]; } Index UserAccount @Html.DisplayNameFor(model => model.UserName) : @user.UserName @Html.DisplayNameFor(model => model.UserType) : @user.UserType @Html.DisplayNameFor(model => model.Email) : @user.Email 2.2 Profile properties • ASP.NET cung cấp thuộc tính profile (file hồ sơ), cho phép lưu trữ liệu tùy chỉnh người dùng theo cách thức thuận tiện người dùng • Nó tương tự quản lý trạng thái session, ngoại trừ liệu profile không bị session người dùng hết hạn • Đặc điểm profile sử dụng để lưu trữ thuộc tính cố định liên kết với người dùng • Để sử dụng thuộc tính profile, trước tiên cần bật cấu hình cách sửa đổi tệp cấu hình Web.Config • Trong cần định nhà cung cấp profile, class phía thực nhiệm vụ cấp thấp lưu trữ truy xuất liệu profile • Chúng ta lưu trữ liệu profile người dùng máy chủ SQL Học kết hợp Trang HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET 2.3 Caching • Bộ nhớ đệm cung cấp cách lưu trữ liệu truy cập thường xuyên sử dụng lại liệu • Là cách hiệu để cải thiện hiệu suất ứng dụng web Bộ đệm đầu cho phép lưu vào đệm nội dung trả action controller • Bằng cách đó, nội dung giống khơng cần phải tạo action controller gọi • Bộ lọc OutputCache cho phép lưu vào nhớ cache liệu output phương thức action • Theo mặc định, lọc (filer) thuộc tính lưu liệu vào nhớ cache 60 giây Sau 60 giây, Asp.Net MVC thực thi lại phương thức action lưu lại output vào nhớ cache • Chúng ta kích hoạt nhớ đệm output cho phương thức action controller cách thêm thuộc tính [OutputCache] hình sau: [OutputCache(Duration=10, VaryByParam="none")] public ActionResult Index() { return View(); } Demo sử dụng Session Viết code lần click vào link ‘Refresh’ giá trị tăng lên Sử dụng session để bảo toàn giá trị biến Tạo Project web mvc mới, tạo file controller SessionDemo có nội dung sau: Học kết hợp Trang HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET Tạo view cho method Index: Kết nhận được: Mỗi click vào link Refresh, giá trị Count tăng lên Mở trình duyệt IE paste đường link vừa thực hiện, thấy session tạo với id khác, Count lại giá trị Học kết hợp Trang HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET Demo sử dụng Application Tạo controller ApplicationDemo viết code sau: Tạo view cho action Index: Chạy page view click vài lần vào link Refresh: Học kết hợp Trang 10 HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET Copy link paste sang trình duyệt IE: Giá trị Count tăng lên Như biến application có tác dụng phạm vi ứng dụng Demo login vào hệ thống Tạo controller LoginDemo có nội dung sau: using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.Mvc; namespace Proj_StateManagement.Controllers { public class LoginDemoController : Controller { // GET: LoginDemo public ActionResult Index() { return View(); } [HttpPost] public ActionResult CheckLogin(string username, string password) { if (username == "admin" && password == "123456") { Học kết hợp Trang 11 HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET Session["user"] = username; return RedirectToAction("Index", "Home"); } if (username == "") ViewBag.msg = "Username cannot be empty."; else ViewBag.msg = "Invalid username or password."; return View("Index"); } public ActionResult Logout() { Session.Remove("user"); return View("Index"); } } } Tạo file view.cshtml có nội dung: @{ ViewBag.Title = "Index"; } Login @using (Html.BeginForm("CheckLogin", "LoginDemo")) { @Html.Label("Username") @Html.TextBox("username") @Html.Label("Password") @Html.Password("password") @ViewBag.msg } Mở file Views/Home/Index.cshtml, gõ vào nội dung sau: @{ ViewBag.Title = "Home Page"; } Home Page @if (Session["user"] == null) { Học kết hợp Trang 12 HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET

@Html.ActionLink("Login please","Index","LoginDemo")

} else { Welcome @Session["user"] @Html.Label("Today is") @DateTime.Now.DayOfWeek @Html.ActionLink("Logout","Logout","LoginDemo") } Chạy page view: Nếu không nhập đủ liệu: Nếu nhập sai: Học kết hợp Trang 13 HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET Nếu nhập username password: Copy sang tag mới, kết nhận là: Khi click vào link Logout page xuất cửa sổ login: Học kết hợp Trang 14 HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET Và quay page kia, ấn refresh, trạng thái page thay đổi theo: Nếu trang Views/Home/index.cshtml khơng thơng tin trang mà nhận thông báo hình Chỉ đăng nhập hiển thị thông tin trang index.cshtml Hướng dẫn tập Mua bán hàng online Trước hết tạo class Sanpham sau: public class Sanpham { public string masp { get; set; } public string tensp { get; set; } public string hinhanh { get; set; } public int giatien { get; set; } public Sanpham() { } public Sanpham(string masp) { this.masp = masp; } public override bool Equals(object obj) { Sanpham s = (Sanpham)obj; return (this.masp == s.masp); } public Sanpham(string masp, string tensp, string hinhanh, int giatien) { this.masp = masp; Học kết hợp Trang 15 HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET this.tensp = tensp; this.hinhanh = hinhanh; this.giatien = giatien; } } Lưu ý: Viết lại phương thức Equals để so sánh đối tượng sản phẩm mã chúng giống Sau tạo tiếp class SanphamMua, class có thuộc tính masp (mã sản phẩm) soluong (số lượng) Class dùng để ghi nhớ mã sản phẩm số lượng sản phẩm người dùng chọn mua Khi lập đơn hàng cho khách hàng xem chi tiết sản phẩm họ chọn đối chiếu mã sản phẩm mua với mã sản phẩm có để lấy tên sản phẩm, hình ảnh giá tiền public class SanphamMua { public string masp { get; set; } public int soluong { get; set; } public override bool Equals(object obj) { SanphamMua spm = (SanphamMua)obj; return (spm.masp.Equals(this.masp)); } } Lưu ý: Viết lại phương thức Equals để so sánh đối tượng sản phẩm mua mã chúng giống *Tạo MuaBanController viết phương thức đây: public class MuaBanController : Controller { // GET: Sanpham public ActionResult Index() { List ds = new List(); ds.Add(new Sanpham("sp1", "Iphone 12 pro 512", "x.jpg", 1000)); ds.Add(new Sanpham("sp2", "Vsmart Aren", "y.jpg", 400)); ds.Add(new Sanpham("sp3", "Realme", "z.jpg", 350)); Session["hanghoa"] = ds; return View(ds); } public ActionResult Chonmua(SanphamMua spm) { List dsmua = (List)Session["giohang"]; if (dsmua == null) { Học kết hợp Trang 16 HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET dsmua = new List(); } if (dsmua.Contains(spm)) { int index = dsmua.IndexOf(spm); dsmua[index].soluong++; } else { spm.soluong = 1; dsmua.Add(spm); } Session["giohang"] = dsmua; return View(); } public ActionResult XemGiohang() { List dsmua = (List)Session["giohang"]; return View(dsmua); } public ActionResult XoaSanpham(string masp) { List dsmua = (List)Session["giohang"]; SanphamMua s = new SanphamMua(); s.masp = masp; int index = dsmua.IndexOf(s); s = dsmua[index]; dsmua.Remove(s); Session["giohang"] = dsmua; return View("Chonmua"); } public ActionResult Datmua() { List dsm = (List)Session["giohang"]; Session.Remove("giohang"); return View(dsm); } } Tạo view tương ứng với ActionResult *View Index.cshtml: @model IEnumerable @{ ViewBag.Title = "Index"; } Cửa hàng online Quý khách chọn mua sản phẩm sau đây: Học kết hợp Trang 17 HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET Mã sản phẩm Tên sản phẩm Hình ảnh Giá tiền Mua hàng @foreach (var item in Model) { @item.masp @item.tensp @item.giatien @Html.ActionLink("Chon mua", "Chonmua", "MuaBan", new First_MVC.Models.Sanpham { masp = item.masp}, null) } @Html.ActionLink("Xem giỏ hàng","XemGioHang","MuaBan") *View Chonmua.cshtml @model First_MVC.Models.SanphamMua @{ ViewBag.Title = "Chọn mua"; } Chọn mua @{ List dsmua = (List)Session["giohang"]; List ds = (List)Session["hanghoa"]; } Mã sản phẩm Tên sản phẩm Hình Ảnh Số lượng Giá tiền Xóa sản phẩm @foreach (var item in dsmua) { First_MVC.Models.Sanpham s = new First_MVC.Models.Sanpham(item.masp); Học kết hợp Trang 18 int vitri = ds.IndexOf(s); HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET //tìm sản phẩm mua danh sách hàng hóa s = ds[vitri]; @s.masp @s.tensp @item.soluong @s.giatien Xóa } @Html.ActionLink("Mua tiếp", "Index", "MuaBan") @Html.ActionLink("Đặt hàng", "Datmua", "MuaBan") *View XemGioHang.cshtml @model IEnumerable @{ List ds = (List)Session["hanghoa"]; } @if (Model != null) { Bạn chọn mua Mã sản phẩm Tên sản phẩm Hình Ảnh Số lượng Giá tiền Xóa sản phẩm @foreach (var item in Model) { First_MVC.Models.Sanpham s = new First_MVC.Models.Sanpham(item.masp); int vitri = ds.IndexOf(s); //tìm sản phẩm mua danh sách hàng hóa s = ds[vitri]; @s.masp @s.tensp Học kết hợp Trang 19 HỌC PHẦN: LẬP TRÌNH WEB BẰNG ASP.NET @item.soluong @s.giatien Xóa } } else { Bạn chưa chọn mua sản phẩm nào } @Html.ActionLink("Mua tiếp", "Index", "MuaBan") @Html.ActionLink("Đặt hàng", "Datmua", "MuaBan") *View Datmua.cshtml @model IEnumerable @{ ViewBag.Title = "Đặt hàng"; } Bạn đặt mua @{ List ds = (List)Session["hanghoa"]; } Mã sản phẩm Tên hàng Hình Ảnh Số lượng Giá tiền Thành tiền @{ var tongsl = 0; var thanhtien = 0; var tongtien = 0; } @foreach (var item in Model) { First_MVC.Models.Sanpham s = new First_MVC.Models.Sanpham(item.masp); int vitri = ds.IndexOf(s); //tìm sản phẩm mua danh sách hàng hóa s = ds[vitri]; tongsl += @item.soluong; thanhtien = @item.soluong * s.giatien; Học kết hợp Trang 20

Ngày đăng: 24/02/2024, 06:38

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan