Tài liệu Hướng dẫn thực hành Web

pdf 71 trang vanle 3830
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu Hướng dẫn thực hành Web", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftai_lieu_huong_dan_thuc_hanh_web.pdf

Nội dung text: Tài liệu Hướng dẫn thực hành Web

  1. Tài Liệu HƯỚNG DẪN THỰC HÀNH WEB
  2. LẬP TRÌNH WEB CHƯƠNG 6: HƯỚNG DẪN THỰC HÀNH Bài 1: Xây dựng ứng dụng WebCalculator 1. Tạo một Web site  Từ Menu chọn File - New - Web site o Template : ASP.NET Web site o Location : File System o Language : Visual C# 2. Thiết kế Form theo mẫu Tạo table : Menu Layout - Insert Table  Kéo thả các Control trong Toolbox vào WebForm.aspx như mẫu trên.  Đặt thuộc tính cho các đối tượng trên Form Dzoaõn Thanh 1
  3. LẬP TRÌNH WEB 3 Viết mã lệnh xử lý  Viết hàm xử lý sự kiện bấm vào nút Tổng.  Bấm đúp (double click) vào nút Tổng trên form sẽ tự động thêm 1 hàm xử lý sự kiện protected void btTong_Click(object sender, EventArgs e) { }  Nhập đoạn mã lệnh (in đậm) vào trong thân hàm vừa phát sinh: protected void btTong_Click(object sender, EventArgs e) { int so1, so2, tong; so1 = int.Parse(txtSo1.Text); so2 = int.Parse(txtSo2.Text); tong = so1 + so2; txtTong.Text = tong.ToString(); } 4. Lưu trữ dạng Unicode :  Giải thích: Các Form hoặc User Control trong 1 ứng dụng ASP.NET không mặc định được lưu theo dạng có hỗ trợ Font Unicode. Vì vậy khi chạy ứng dụng từ Browser sẽ không hiển thị đúng Font chữ tiếng Việt.  Cách sửa: Nếu có sử dụng Font Unicode trong file nào thì cần phải chỉ định cho VS.NET lưu file đó theo đúng định dạng Unicode. o Từ menu chọn File\Save As. Từ hộp thoại Save File As, Từ hộp thoại Save File As, chọn Save with Encoding. Dzoaõn Thanh 2
  4. LẬP TRÌNH WEB 5 Chạy kiểm thử chương trình Dzoaõn Thanh 3
  5. LẬP TRÌNH WEB Bài 2. Xây dựng trang chủ cho Website Bản tin điện tử 1. Mẫu trang chủ Website Tuổi trẻ (www.tuoitre.com.vn) 2. Tạo Project Bản tin điện tử o Từ Menu chọn File – New – Web site • Template : ASP.NET We site • Location : File System – D:\BanTinDienTu • Language : Visual C# 3. Tạo trang Master o Từ Menu chọn Website – Add new item • Template : Master page • Name : MasterPage.master • Language : Visual C# Dzoaõn Thanh 4
  6. LẬP TRÌNH WEB o Chuyển sang màn hình design - Xóa tất cả các control có trên đó o Thêm một table : Menu Layout – Insert table Dzoaõn Thanh 5
  7. LẬP TRÌNH WEB Vùng hiển thị Banner Vùng hiển thị Menu Vùng hiển thị Marquee Vùng hiển thị Nội dung Vùng hiển thị AdRotaror Vùng hiển thị Image Copyright@ By 063T 4. Tạo hiển thị Banner o Sử dụng Image Control: • Kéo thả 1 Image Control vào vùng hiển thị Banner. • Đặt thuộc tính ImageUrl của Image là Images\banner.gif Dzoaõn Thanh 6
  8. LẬP TRÌNH WEB 5. Tạo hiển thị Menu cột trái o Sử dụng Hyperlink Control: • Kéo thả các 4 Hyperlink Control vào vùng hiển thị Menu. • Đặt thuộc tính cho các Hyperlink. Control Property Value Hyperlink1 Text Trang chủ NavigateUrl Index.aspx Hyperlink2 Text Xã hội NavigateUrl Xahoi.aspx Hyperlink3 Text Kinh tế NavigateUrl Kinhte.aspx Hyperlink4 Text Thể thao NavigateUrl Thethao.aspx o Sử dụng AdRotator: • Từ Menu chọn Project\Add New Item, chọn XML File từ ô cửa sổ Template, đặt tên file là Ads.xml. Dzoaõn Thanh 7
  9. LẬP TRÌNH WEB o Ta thêm nội dung của file Ads.xml như sau: Images\Quang_cao\qc_Ao_cuoi.jpg qc_Ao_cuoi com Quảng cáo áo cưới 80 quangcao Images\ Quang_cao\qc_Mouse.jpg Mouse 80 quangcao Images\ Quang_cao\qc_Trang_suc.jpg Đồ trang sức 80 quangcao o Kéo thả các 1 AdRotator Control vào menu o Chỉ đường dẫn thuộc tính AdvertisementFile là Ads.xml Dzoaõn Thanh 8
  10. LẬP TRÌNH WEB 6. Tạo và hiển thị cột quảng cáo bên phải o Sử dụng Marquee Đưa con trỏ vào vùng cần hiển thị định dạng marquee, chọn View HTML Source Ví dụ nội dung marquee như sau Phim trong tuần o Sử dụng Image Control: • Kéo thả các 2 Image Control vào Ads. • Đặt thuộc tính ImageUrl cho các Image: Control Value Image1 Images\Image1.gif Image2 Images\Image2.gif Dzoaõn Thanh 9
  11. LẬP TRÌNH WEB 7. Tạo hiển thị phần nội dung : o Vào vùng hiển thị nội dung thêm control ContentPlaceHolder Dzoaõn Thanh 10
  12. LẬP TRÌNH WEB 8. Tạo Trang chủ Bản tin điện tử o Vào Menu Website – Add new item • Template : Webform • Name : index.aspx • Language : Visual C# • Chọn : Select master page Dzoaõn Thanh 11
  13. LẬP TRÌNH WEB Nhập nội dung trang Default.aspx F5 - Chạy chương trình. o Tương tự : xây dựng 3 trang XaHoi.aspx, KinhTe.aspx, TheThao.aspx với kết thừa từ trang master page Dzoaõn Thanh 12
  14. LẬP TRÌNH WEB Bài 3. Xây dựng trang web Nhập tin tức mới 1. Thiế kế Cơ sở dữ liệu (Xây dựng CSDL Access) o Mở ứng dựng Microsoft Access o Thiết kế CSDL, đặt tên là tintuc.MDB, có cấu trúc gồm: - Một bảng Bantin như sau: Bantin STT Tên trường Kiểu dữ liệu Ghi chú 1 MaBanTin Text(10) Primary Key 2 TieuDe Text (255) Required 3 NoiDungTomTat Memo Required 4 NoiDung Memo Required 5 NgayDangTin Date/Time Ngày hiện hành 6 HinhAnh Text(255) 7 ChuThichHinh Text(255) 8 MaLinhVuc Text(10) Foreigned Key - Một bản Linhvuc: Linhvuc STT Tên trường Kiểu dữ Ghi chú liệu 1 MaLinhvuc Text(10) Primary Key 2 Tenlinhvuc Text (255) Required o Lưu tintuc.MDB vào thư mục App_Data trong thư mục gốc chứa trang web 2. Thêm một trang mới và Thiết kế Form theo mẫu dưới đây (dùng control AccessDataSource) Dzoaõn Thanh 13
  15. LẬP TRÌNH WEB o Xử lý : Khi nhấn nút Lưu, dữ liệu trên from sẽ được lưu xuống table Linhvuc trong Database (Access) Tạo 1 control AccessDataSource o Từ Toolbox – Kéo thả 1 control AccessDataSource o Phải chuột vào control AccessDataSource chọn “Configure Data Source ” Chọn đường dẫn đến file tintuc.mdb -> Next o Chọn “Specify columns from a table or view” o Name : Bantin o Columns : chọn * (Chọn các cột sẽ được hiển thị trong câu truy vấn select – chọn * có nghĩa là chọn tất cả các cột) o Next Dzoaõn Thanh 14
  16. LẬP TRÌNH WEB o Chọn Advanced Chọn “Generate INSERT, UPDATE, and DELETE statements” (Tự động tạo các câu truy vấn INSERT, UPDATE, DELETE) -> Next -> Finish Dzoaõn Thanh 15
  17. LẬP TRÌNH WEB o Phải chuột AccessDataSource1, chọn Property, chọn thuộc tính “InsertQuery” o Liên kết 1 cột trong bảng với 1 control trong màn hình (ví dụ cột Malinhvuc liên kết với control txtMalinhvuc) o Parameters : Malinhvuc o Parameter source : Control o ControlID : txtMalinhvuc o Viết hàm xử lý sự kiện click cho nút Lưu (Bấm đúp (double click) vào nút Lưu trên form, chương trình sẽ tự động thêm hàm xử lý sự kiện) protected void btnLuu_Click(object sender, EventArgs e) { AccessDataSource1.Insert(); } F5- Chạy chương trình và nhập nội dung Dzoaõn Thanh 16
  18. LẬP TRÌNH WEB 3.Thêm một trang mới và Thiết kế Form theo mẫu dưới đây: (txtMabantin) (txtTieude) (txtNoidungtomtat) (txtNoidung) (txtCldNgaydangtin) (txtUploadFile) (txtChuthichhinh) (cmdLuu) (cmdXoa) o Xử lý: - Lấy data từ table Linhvuc load lên DropdownList Linhvuc tren form (Sinh viên tự thực hành phần này) - Mặc định CldCldNgaydangtin là chọn ngày hiện hành - Nhấn nút Lưu, tất cả dữ liệu sẽ được lưu xuống table Bantin trong database Tương tự như trang Thêm Lĩnh vực, ta tạo 1 control AccessDataSource o Từ Toolbox – Kéo thả 1 control AccessDataSource o Phải chuột vào control AccessDataSource chọn “Configure Data Source ” Chọn đường dẫn đến file tintuc.mdb -> Next o Chọn “Specify columns from a table or view” o Name : Bantin Dzoaõn Thanh 17
  19. LẬP TRÌNH WEB o Columns : chọn * (Chọn các cột sẽ được hiển thị trong câu truy vấn select – chọn * có nghĩa là chọn tất cả các cột) o Next o Chọn Advanced Chọn “Generate INSERT, UPDATE, and DELETE statements” (Tự động tạo các câu truy vấn INSERT, UPDATE, DELETE) -> Next -> Finish o Phải chuột AccessDataSource1, chọn Property, chọn thuộc tính “InsertQuery” o Liên kết 1 cột trong bảng với 1 control trong màn hình (ví dụ cột MaBanTin liên kết với control txtMaBanTin) o Parameters : Mabantin o Parameter source : Control o ControlID : txtMabantin o Tương tự cho các cột o TieuDe o NoiDung o NoiDungTomTat o NgayDangTin o ChuThichHinh o Malinhvuc o *Riêng cột HinhAnh : Bấm vào “Show advanced properties” ,Properties : PropertyName chọn FileName Dzoaõn Thanh 18
  20. LẬP TRÌNH WEB o Viết hàm xử lý thông tin cho Trang Nhập Tin tức mới, - Hàm load ngày mặc định là ngày hiện hành cho control Ngày đăng tin protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) cldNgaydangtin.SelectedDate = DateTime.Now; } - Hàm Nhận tập tin Upload từ Client và Lưu lên Server protected void SaveFileUpload() { string strFileName; if (txtFileUpload.FileName != "") { strFileName = Server.MapPath("Upload\\" + txtFileUpload.FileName); txtFileUpload.PostedFile.SaveAs(strFileName); } } - Hàm xử lý sự kiện click cho nút Lưu (Bấm đúp (double click) vào nút Lưu trên form, chương trình sẽ tự động thêm hàm xử lý sự kiện) Dzoaõn Thanh 19
  21. LẬP TRÌNH WEB protected void cmdLuu_Click(object sender, EventArgs e) { AccessDataSource1.Insert(); SaveFileUpload(); } F5- Chạy chương trình và nhập nội dung Dzoaõn Thanh 20
  22. LẬP TRÌNH WEB Bài 4: Xây dựng trang chủ cho từng Lĩnh vực 1. Xây dựng Trang chủ Lĩnh vực Xã hội o Thêm trang xahoi.aspx kế thừa từ trang MasterPage (trang cha) • Menu Website – Add new item 1. Template : Webform 2. Name : xahoi.aspx 3. * Chọn “Select master page”, chọn trang Master Page o Tạo hiển thị tóm tắt các bản tin thuộc lĩnh vực Xã hội Sử dụng DataList Control: • Từ ToolBox – kéo control DataList vào Window form • Đặt tên cho DataList là dataListTomTatTinTuc Sử dụng AccessDataSource • Từ cửa sổ Toolbox, kéo thả đối tượng AccessDataSource vào Web Form. • Kết nối đến tập tin “tintuc.MDB” • Tạo câu truy vấn Dzoaõn Thanh 21
  23. LẬP TRÌNH WEB o Vào Property của dataListTomTatTinTuc chọn DataSourceID bằng AccessDataSource1 - Nhấn chuột phải vào dataListTomTatTinTuc và chọn Edit Template > Item Templates từ pop-up menu. Dzoaõn Thanh 22
  24. LẬP TRÌNH WEB - Xóa tất cả nội dung trong Item Template. Vào Layout – Insert Table (có thuộc tính Width = 100%), thêm vào các control theo mẫu sau : Font Size Font Bold Fore Color Hyperlink1 Small True Maroon Label1 Small DimGray Label2 Small - Phải chuột vào từng Control chọn EditDataBinding • Bindable Properties : Text • Field binding – Bound to : TieuDe Dzoaõn Thanh 23
  25. LẬP TRÌNH WEB Dzoaõn Thanh 24
  26. LẬP TRÌNH WEB Dzoaõn Thanh 25
  27. LẬP TRÌNH WEB Chạy và kiểm tra chương trình 2. Nhập thêm thông tin cho các lĩnh vực khác, thiết kế trang chủ cho lĩnh vực Kinh tế (kinhte.aspx), Thể thao (thethao.aspx), Dzoaõn Thanh 26
  28. LẬP TRÌNH WEB Bài 5: Xây dựng trang hiển thị chi tiết tin tức 1. Tạo trang BanTin.aspx kết thừa từ MasterPage • Vào Menu Website -> Add New Item • Chọn Template : Web form • Name : bantin.aspx • Chọn : Place code in separate file (phân chia thiết kế và code thành 2 file) • Chọn : Select master page (trang này kế thừa từ 1 trang cha) 2. Tạo hiển thị thông tin chi tiết của một bản tin Sử dụng DataList Control: • Kéo thả 1 DataList vào bantin.apsx. • Đặt tên cho DataList là dataListBanTinChiTiet Thêm control AccessDataSource vào Webform • Kết nối đến tập tin “TINTUC.MDB” • Tạo câu truy vấn Select Vào điều kiện Where o Column : MaBanTin, Operator : “=”, o Source : QueryString o QueryString field : MaBanTin o Bấm Add Dzoaõn Thanh 27
  29. LẬP TRÌNH WEB - Kết nối AccessDataSource vào DataList • Chọn Property : ->DataSourceID : AccessDataSource1 - Nhấn chuột phải vào dataListBanTinChiTiet và chọn Edit Template -> Item Templates từ pop- up menu. - Vào Layout -> Insert table Thiết kế table như sau : - Liên kết 1 control với 1 cột trong bảng BANTIN Label1 Text NgayDangTin (Format : {0:hh:mm:ss - dd/MM/yyyy}) Label2 Text DataItem.TieuDe Label3 Text NoiDungTomTat Label4 Text NoiDung Label5 Text ChuThichHinh Image1 ImageUrl HinhAnh Dzoaõn Thanh 28
  30. LẬP TRÌNH WEB Phải chuột vào Label1 -> Edit DataBinding Tương tự cho các control còn lại Chạy và Kiểm tra chương trình: Bấm Ctrl + F5 : Trang web load lên nhưng không có nội dung Dzoaõn Thanh 29
  31. LẬP TRÌNH WEB Thay đổi lại đường link / bantin.aspx?MaBanTin=XH1 Dzoaõn Thanh 30
  32. LẬP TRÌNH WEB 3. Liên kết Trang chủ lĩnh vực xã hội với trang hiển thị bản tin chi tiết Sửa lại Bindable Property cho DataList trong Xahoi.aspx Bài tập làm thêm: - Hoàn thiện trang chủ lĩnh vực Kinh tế và liên kết với trang BanTin.aspx - Hoàn thiện trang chủ lĩnh vực Thể thao và liên kết với trang BanTin.aspx Dzoaõn Thanh 31
  33. LẬP TRÌNH WEB Bài 6: Xây dựng Menu động bằng DataList Như các bài trước, Menu được thiết kế bằng các Hyperlink ở trang PageMaster.master và khi tạo các trang con chỉ cần Apply (check vào Select MasterPage) là có thể có một Menu giống như ở trang PageMaster. Các Menu này quá cố định, vấn đề đặt ra là nếu website này cần thêm một lĩnh vực mới nữa thì xử lý sao? (Ví dụ thêm lĩnh vực về Giáo dục, các tin tức liên quan đến Giáo dục) Một dự án Web hay Software cần tối ưu hóa bằng cách bổ sung đầy đủ các chức năng có thể, mang tính tiện dụng cao hạn chế việc chỉnh sửa. Do đó, chúng ta cần xây dựng một Menu động, những lĩnh vực cần phải lấy từ Database. Các bài trước chúng ta đã thiết kế trang Thêm lĩnh vực, giờ chỉ cần load lên Menu. Cũng tương tự như các bài trước, nhưng chúng ta thiết kế Menu trên một Usercontrol (khi thiết kế xong thì UserContol này cũng như những control vốn có của bộ Visual Studio), sau đó gắn Usercontrol này lên trang PageMaster. Tạo một UserControl mới: o Vào Menu Website – Add new item • Template : Web User Control • Name : ucontrolMenu.ascx • Language : Visual C# Dzoaõn Thanh 32
  34. LẬP TRÌNH WEB Sử dụng DataList Control: • Từ ToolBox – kéo control DataList vào ucontrolMenu Sử dụng AccessDataSource • Từ cửa sổ Toolbox, kéo thả đối tượng AccessDataSource vào ucontrolMenu • Kết nối đến tập tin “tintuc.MDB” • Tạo câu truy vấn -> Netx -> Finish Dzoaõn Thanh 33
  35. LẬP TRÌNH WEB o Vào Property của DataList chọn DataSourceID bằng adsGetLinhvuc - Nhấn chuột phải vào DataList và chọn Edit Template > Item Templates từ pop-up menu. o Xóa tất cả nội dung trong Item Template. Vào Layout – Insert Table (có thuộc tính Width = 100%), thêm vào các control theo mẫu sau : Dzoaõn Thanh 34
  36. LẬP TRÌNH WEB - Image: thuộc tính ImageUrl là một Buttlet - Phải chuột vào Hyperlink1 -> Edit DataBinding + Text: Hiển thị Tên Linh vực + NavigateUrl: link (ở đây chúng ta chưa đặt thuộc tính cho NavigateUrl) Xong, ta xóa các Hyperlink lúc đầu ở trang PageMaster, và nắm kéo ucontrol Menu từ cửa sổ Solution vào chổ các Hyperlink vừa xóa. Lúc này ta có thể thêm một lĩnh vực mới từ trang Thêm lĩnh vực mới, F5 -> Chạy chương trình và kiểm tra thử, không khác gì các Menu cũ làm bằng Hyperlink và còn có thêm một lĩnh vực vừa mới thêm Dzoaõn Thanh 35
  37. LẬP TRÌNH WEB Bài 7 : Xây dựng một trang duy nhất để hiển thị thông tin của từng Lĩnh vực Với một Menu động được load thông tin từ Database như vậy, nếu như ở các bài trước, một lĩnh vực là một trang riêng biệt thì ở đây chúng ta không thể thêm từng trang mỗi khi có một lĩnh vực mới Vấn đề là phải làm sao thiết kế một trang duy nhất đề hiển thị thông tin cho các lĩnh vực mặc cho có thêm mới lĩnh vực. 1. Tương tự, ta thêm một trang mới để hiển thị thông tin cho từng lĩnh vực, o Vào Menu Website – Add new item • Template : Web form • Name : Linhvuc.aspx • Language : Visual C# • Chọn : Select master page (trang này kế thừa từ 1 trang cha) 2. Tạo hiển thị thông tin chi tiết của một bản tin Sử dụng DataList Control: • Kéo thả 1 DataList vào Linhvuc.apsx. Thêm control AccessDataSource vào Webform • Kết nối đến tập tin “TINTUC.MDB” • Tạo câu truy vấn Select Vào điều kiện Where o Column : Malinhvuc, Operator : “=”, o Source : QueryString Dzoaõn Thanh 36
  38. LẬP TRÌNH WEB o QueryString field : tut o Bấm Add -> Next -> Finish o Vào Property của DataList chọn DataSourceID bằng AccessDataSource1 - Nhấn chuột phải vào DataList và chọn Edit Template > Item Templates từ pop-up menu. - Xóa tất cả nội dung trong Item Template. Vào Layout – Insert Table (có thuộc tính Width = 100%), thêm vào các control theo mẫu sau : Dzoaõn Thanh 37
  39. LẬP TRÌNH WEB Font Size Font Bold Fore Color Hyperlink1 Small True Maroon Label1 Small DimGray Label2 Small - Phải chuột vào từng Control chọn EditDataBinding • Bindable Properties : Text • Field binding – Bound to : TieuDe Vì trang Bantin.aspx (trang chi tiết) đang đón nhận, chờ một Mabantin truyền tới, do đó ta thêm thuộc tính là MaBanTin và Fomat cho NavigateUrl Dzoaõn Thanh 38
  40. LẬP TRÌNH WEB Dzoaõn Thanh 39
  41. LẬP TRÌNH WEB Dzoaõn Thanh 40
  42. LẬP TRÌNH WEB Chạy và kiểm tra chương trình Bấm Ctrl + F5 : Trang web load lên nhưng không có nội dung Thay đổi lại đường link / Linhvuc.aspx?tut=TT Dzoaõn Thanh 41
  43. LẬP TRÌNH WEB 3. Liên kết Menu từ trang PageMaster tới trang Linhvuc.aspx Sửa lại Edit DataBinding cho Hyperlink trong DataList của ucontrolMenu Chạy chương trình từ trang Default.aspx Dzoaõn Thanh 42
  44. LẬP TRÌNH WEB Bài 8: Xây dựng trang chủ cho website 1. Mẫu trang chủ Bản tin điện tử Website Tuổi trẻ (www.tuoitre.com.vn) 2. Tạo hiển thị tóm tắt các bản tin thuộc các lĩnh vực Sử dụng DataList Control: • Kéo thả 1 DataList vào Default.aspx. Tạo AccessDataSource control • Từ cửa sổ Toolbox, kéo thả đối tượng AccessDataSource vào Web Form. • Kết nối DataSource vào TINTUC.mdb. • Viết câu lệnh SQL SELECT truy vấn dữ liệu từ bảng BANTIN SELECT T.MaBanTin, T.TieuDe, T.NgayDangTin, T.NoiDungTomTat, T.NoiDung, T.HinhAnh, T.ChuThichHinh, T.MaLinhVuc, L.TenLinhVuc FROM (LINHVUC L INNER JOIN BANTIN T ON L.MaLinhVuc = T.MaLinhVuc) GROUP BY T.MaLinhVuc, T.MaBanTin, T.TieuDe, T.NgayDangTin, T.NoiDungTomTat, T.NoiDung, T.HinhAnh, T.ChuThichHinh, L.TenLinhVuc, L.MaLinhVuc HAVING (T.NgayDangTin >= ALL (SELECT NGAYDANGTIN FROM BANTIN WHERE MALINHVUC = L.MALINHVUC)) Dzoaõn Thanh 43
  45. LẬP TRÌNH WEB Dzoaõn Thanh 44
  46. LẬP TRÌNH WEB Kiểm tra câu truy vấn -> Finish Dzoaõn Thanh 45
  47. LẬP TRÌNH WEB 3. Chọn thuộc tính DataSourceID của DataList là AccessDataSource1 4. Thiết kế lại Item Template cho DataList • Nhấn chuột phải vào DataList và chọn Edit Template > Item Templates từ pop-up menu. Từ Toolbox kéo thả vào Item Template một Table HTML Control. Chọn Tab HTML, sửa lại thông tin Table như sau: • Đặt thuộc tính Edit DataBinding cho các control: Linhvuc.aspx?tut={0} Dzoaõn Thanh 46
  48. LẬP TRÌNH WEB Chạy và kiểm tra chương trình Dzoaõn Thanh 47
  49. LẬP TRÌNH WEB Bài 9: Application và Session Hiểu ý nghĩa và phạm vi sử dụng Application và Session 1. Ý nghĩa Tên đối tượng Chức năng Session Lưu trữ thông tin về một session (phiên làm việc) của user. Application Chia sẽ thông tin giữa các user trong cùng một ứng dụng. 2. Sự kiện Tên sự kiện Sự kiện phát sinh Application_Star Khi ứng dụng web lần đầu tiên được gọi t Session_Start Khi bắt đầu một phiên làm việc của người dùng kết nối vào ứng dụng Application_End Khi ứng dụng web kết thúc. Một ứng dụng web kết thúc khi ứng dụng web được khởi tạo lại hoặc khi không còn người dùng nào kết nối vào ứng dụng. Session_End Khi phiên làm việc của người dùng chấm dứt. Người dùng không kết nối đến ứng dụng trong 1 khoảng thời gian TimeOut. 3. Khởi tạo, Lấy giá trị và Hủy biến Phạm vi Cú pháp Diễn giải Application Application[“TenBien”] = “abc” ; Khởi tạo 1 biến TenBien với giá trị “abc” và lưu vào ứng dụng string s = (string) Application[“chuoi”] ; Lấy thông tin giá trị biến int count = (int) Application[“count”] ; “chuoi” từ ứng dụng và lưu vào biến s, Session Session[“TenBien”] = “abc” Khởi tạo 1 biến TenBien với giá trị “abc” và lưu vào phiên làm việc của user string s = (string) Session[“username”] ; Lấy thông tin giá trị biến int count = (int) Session[“count”] ; username từ phiên làm việc của user và lưu vào biến s, Session.TimeOut = 30 Thiết lập thời gian TimeOut cho 1 phiên làm việc của user là 30 phút Session.Abandon() Hủy bỏ tất cả các biến trong phiên làm việc của user Dzoaõn Thanh 48
  50. LẬP TRÌNH WEB 4. Tạo mới một Web User control đặt tên là: ucontrolThongke Thiết kế như sau và đặt thuộc tính ID cho Label1: lblTruycap và Label2: lblOnline 5. Viết mã lệnh xử lý a. Khởi tạo và lưu thông tin Số người truy cập và duyệt website khi website được kích hoạt lần đầu tiên i. Từ menu Website -> Add new item -> Global Application Class và đặt tên mặc định là Global.asax ii. Sửa xử lý trong hàm Application_Start như sau: void Application_Start(object sender, EventArgs e) { // Code that runs on application startup Application["so_truy_cap"] = 0; Application["co_nguoi_online"] = 0; } b.Tăng số người truy cập và duyệt website mỗi khi có 1 người dùng mới viếng thăm website Dzoaõn Thanh 49
  51. LẬP TRÌNH WEB void Session_Start(object sender, EventArgs e) { // Code that runs when a new session is started Application["so_truy_cap"] = (int)Application["so_truy_cap"] + 1; Application["co_nguoi_online"] = (int)Application["co_nguoi_online"] + 1; } c. Giảm số người online khi có 1 người dùng thoát khỏi website void Session_Start(object sender, EventArgs e) { Application["co_nguoi_online"] = (int)Application["co_nguoi_online"] - 1; } d. Lấy thông tin số người truy cập và viếng website và hiển thị ra màn hình i. Từ cửa sổ Solution Explorer, mở trang ucontrolThongke ở chế độ viết code (View Code) ii. Sửa xử lý trong hàm Page_Load như sau: protected void Page_Load(object sender, EventArgs e) { lblTruycap.Text = (string)Application["so_truy_cap"].ToString(); lblOnline.Text = (string)Application["so_nguoi_online"]. ToString(); } Kéo thả controlThongke vào trang MasterPage. Chạy chương trình từ trang Default.aspx Dzoaõn Thanh 50
  52. LẬP TRÌNH WEB PHẦN II: QUẢN TRỊ WEBSITE Bài 10: Xây dựng trang quản trị cho Webmaster Một dự án Website luôn phải có phần quản trị, giúp cho người quản trị dễ dàng quản lý và cập nhật thông tin lên web. Tương tự như phần Client ở trên, quản trị cũng cần phải có một giao diện và các chức năng quản lý. Để cho cấu trúc website rõ ràng, dễ quản lý, chúng ta nên tạo một thư mực (Folder) tên Webmaster, sau đó tạo tất cả các trang cho quản trị ở trong thư mục này. Trước tiên tạo trang MasterPage cho phần quản trị. 1. Tạo trang Master o Click phải chuột lên thư mục Webmaster chọn – Add new item • Template : Master page • Name : MasterPage.master • Language : Visual C# Cấu trúc web cho quản trị đơn giản, chỉ cần banner và Menu chức năng, giao diện như sau: Menu được thiết kế bằng control TreeView, cùng với các link sau: - Lĩnh vực >> Thêm mới: link tới trang Insert_Linhvuc.aspx - Lĩnh vực >> Cập nhật: link tới trang Edit_Linhvuc.aspx - Bản tin >> Thêm mới: link tới trang Insert_Bantin.aspx - Bản tin>> Cập nhật: link tới trang Edit_Bantin.aspx - Đổi password: link tới trang ChangePass.aspx - Xem góp ý: link tới trang ViewGopy.aspx 2. Tạo các trang con trong thư mục Webmaster (Default.aspx,Insert_Bantin.aspx, ) Select MasterPage ở trên. 3. Tạo trang Đăng nhập cho webmaster o Click phải chuột lên thư mục Webmaster chọn – Add new item • Template :WebFrom Dzoaõn Thanh 51
  53. LẬP TRÌNH WEB • Name : Login.aspx • Language : Visual C# • Không check vào Select MasterPage o Trang login.aspx được thiết kế như sau: (có control Vadidation để kiểm tra dữ liệu) txtUsernam e txtPassword lblLoi cmdLogin Thông tin được xác định dựa vào dữ liệu từ Database, do đó chúng ta phải thiết kế thêm Table ở dưới Database, đặt tên table: Taikhoan Tên trường Kiểu dữ liệu Ghi chú ID Text(30) Khóa chính Pass Text(10) Nhập trước dữ liệu giả: ID: admin và Pass: 123456 Khi đăng nhập thành công, sẽ chuyển về trang Default.aspx của webmaster, vào thao tác các chức năng từ Menu đã được thiết kế ở trang MasterPage. Vấn đề đặt ra, nếu trên thanh địa chỉ của trình duyệt, ta gõ link thẳng vào các trang khác trong webmaster mà không cần phải qua đăng nhập thì sao? Ví dụ ta gõ: Do đó, ta phải kiểm tra và ngăn chặn không cho truy cập thẳng vào bên trong mà không qua đăng nhập bằng cách sử một biến nào đó mà các trang đều nhìn thấy, ta sử dụng Session.  Hoạt động của session này: i. Khởi tạo giá trị ban đầu của Session này là false ii. Khi đăng nhập thành công thì giá trị của Session này là true iii. Ở các trang khác trong webmaster, khi trang web được load lên lần đầu, ta kiểm tra, nếu như giá trị Session này là false thì chuyển về trang Login, bắt người dung phải đăng nhập trước. Nên đặt kiểm tra này ở trang MasterPage, không cần đặt nhiều lần ở các trang con  Cài đặt: i. Trong file Global.asax ta khởi tạo Session có giá trị false, tên: Session[“Login”] void Session_Start(object sender, EventArgs e) { // Code that runs when a new session is started Application["so_truy_cap"] = (int)Application["so_truy_cap"] + 1; Application["co_nguoi_online"] = (int)Application["co_nguoi_online"] + 1; Dzoaõn Thanh 52
  54. LẬP TRÌNH WEB // Khởi tạo giá trị Session Session.Timeout = 30; / Session["Login"] = false; } ii. Ta viết code cho trang Login.aspx, trong sự kiện Click của cmdLogin protected void cmdLogin_Click(object sender, EventArgs e) { CheckLogin(); } private void CheckLogin() { string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); string strquery = "Select * from Taikhoan"; OleDbDataAdapter adap = new OleDbDataAdapter(strquery, dbconn); DataTable dt = new DataTable(); adap.Fill(dt); foreach (DataRow dr in dt.Rows) { if ((txtUsername.Text) == dr["id"].ToString() && txtPassword.Text == dr["pass"].ToString()) { Session["Login"] = true; // Gán giá trị Session là true Response.Redirect("Default.aspx", false); return; } } lblLoi.Text = " Invalid Account "; } iii. Đặt kiểm tra Session ở trong Page_Load của MasterPage, nếu Session là false thì chuyển về trang Login.aspx protected void Page_Load(object sender, EventArgs e) { if ((bool)Session["Login"] == false) { Response.Redirect("Login.aspx", false); return; } } Dzoaõn Thanh 53
  55. LẬP TRÌNH WEB iv. Khi Logout khỏi trang quản trị, thì ta gán biến Session[“login”] thành false. Sự kiện Click của Logout (Dùng control linkbutton thiết kế nút Logout) protected void linkLogout_Click(object sender, EventArgs e) { Session["Login"] = false; Response.Redirect("Login.aspx", false); } 4. Tạo trang Thêm mới Bản tin (Insert_Bantin.aspx) o Click phải chuột lên thư mục Webmaster chọn – Add new item • Template :WebFrom • Name : Insert_Bantin.aspx • Language : Visual C# • Check vào Select MasterPage o Trang Insert_Bantin.aspx được thiết kế như sau: (có control Vadidation để kiểm tra dữ liệu) - Sử dụng sự hổ trợ của Control bên ngoài (Free TextBox) để người dùng định dạng html cho phần nội dung Dzoaõn Thanh 54
  56. LẬP TRÌNH WEB  Hoạt động của trang Thêm mới bản tin: i. Khi trang web được load lên, dữ liệu được lấy lên và gắn vào DropdownList Lĩnh vực ii. Khi nhấn nút Lưu, dữ liệu sẽ được lưu xuống table Bantin đúng theo từng field và định dạng của Database. Nếu có hình ảnh, hình sẽ được upload vào thư mục Upload đã tạo sẵng của Website và trường Hinhanh của table Bantin chỉ lưu tên của hình. (Ví dụ: XH1.jpg)  Cài đặt: i. Lấy dữ liệu lên CboLinhvuc khi trang web vừa hiển thị. Viết code trong sự kiện Page_Load protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { cboLinhvuc.DataTextField = "Tenlinhvuc"; cboLinhvuc.DataValueField = "Malinhvuc"; GetLinhvuc();// Gọi lại hàm Getlinhvuc } } //Hàm lấy dữ liệu lên cho CboLinhvuc protected void GetLinhvuc() { string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); dbconn.Open(); string strquery = "Select * from Linhvuc"; OleDbDataAdapter adap = new OleDbDataAdapter(strquery, dbconn); dbconn.Close(); DataTable dt = new DataTable(); adap.Fill(dt); cboLinhvuc.DataSource = dt; cboLinhvuc.DataBind(); } ii. Khi nhấn Lưu bản tin, ta mặc địng ngày đăng tin là ngày giờ hiện tại //Hàm Upload hình ảnh vào thư mục Upload của website nếu có hình protected void SaveFileUpload() { string strFileName; if (txtFileUpload.FileName != "") { strFileName = Server.MapPath("~/Upload\\" + txtFileUpload.FileName); txtFileUpload.PostedFile.SaveAs(strFileName); } } Dzoaõn Thanh 55
  57. LẬP TRÌNH WEB //Hàm thêm một bản tin vào table Bantin private void SaveInfo() { string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); dbconn.Open(); string strquery = "insert into Bantin"; strquery += " values('" + txtMabantin.Text + "','" + txtTieude.Text + "',"; strquery += "'" + txtNoidungtomtat.Text + "',"; strquery += "'" + txtNoidung.Text + "','" + DateTime.Now + "',"; strquery += "'" + txtFileUpload.FileName + "','" + txtChuthichhinh.Text + "',"; strquery += "'" + cboLinhvuc.SelectedValue + "')"; OleDbCommand cmd = new OleDbCommand(strquery, dbconn); cmd.ExecuteNonQuery(); dbconn.Close(); } //Gọi các hàm trên khi nhấn nút Lưu protected void cmdLuu_Click(object sender, EventArgs e) { SaveInfo(); SaveFileUpload(); } F5 > Chạy thử chương trình. Dzoaõn Thanh 56
  58. LẬP TRÌNH WEB 5. Tạo trang Cập nhật, chỉnh sửa bản tin (Edit_Bantin.aspx) o Click phải chuột lên thư mục Webmaster chọn – Add new item • Template :WebFrom • Name : Edit_Bantin.aspx Dzoaõn Thanh 57
  59. LẬP TRÌNH WEB • Language : Visual C# • Check vào Select MasterPage o Trang Edit_Bantin.aspx được thiết kế như sau: . Một DropdownList Lĩnh vực ( ID: Cbolinhvuc) . button Tìm (ID: cmdTim) . GridView để hiển thị thông tin (gvBantin) Định dạng Properties của GridView Bản tin: - AllowPaging: True - Cho phép phân trang - Allow Sorting: True – Có thể sắp xếp theo cột - AutoGenerateColumns: False - Chọn Colums: o Chọn BoundField > nhấn Add . Header Text: Tiêu đề . DatField: Tieude (tên của trường dữ liệu dưới database) o Chọn BoundField > nhấn Add . Header Text: Ngày đăng tin . DatField: Ngaydangtin (tên của trường dữ liệu dưới database) Dzoaõn Thanh 58
  60. LẬP TRÌNH WEB o Chọn Edit,Update,Cancel và Delete trong CommandField > nhấn Add o Ok  Hoạt động: i. Lấy dữ liệu lên cho CboLinhvuc, dữ liệu load lên GridView tùy vào giá trị hiện tai của CboLinhvuc. ii. Khi nhấn nút Tìm, GridView bản tin sẽ hiển thị thông tin tùy thuộc vào CboLinhvuc. Lĩnh vực nào thì hiển thị các bản tin của lĩnh vực đó. iii. Có thể phân trang được. iv. Khi nhấn link Delete của tin nào thì sẽ xóa tin đó. v. Khi nhấn Edit của một tin, chuyển tới trang update.aspx để chỉnh sửa nội dung của tin đó.  Cài đặt: i. Khi trwng web vừa load lên, lấy dữ liệu đổ vô CboLinhvuc (giống như CboLinhvuc của trang Thêm mới bản tin).Viết code trong sự kiện Page_Load protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { cboLinhvuc.DataTextField = "Tenlinhvuc"; cboLinhvuc.DataValueField = "Malinhvuc"; GetLinhvuc();// Gọi lại hàm Getlinhvuc để lấy dữ liệu cho CboLinhvuc BindGrid(); //dữ liệu load lên GridView tùy vào giá trị hiện tai của CboLinhvuc } } Dzoaõn Thanh 59
  61. LẬP TRÌNH WEB //Hàm lấy dữ liệu lên cho CboLinhvuc protected void GetLinhvuc() { string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); dbconn.Open(); string strquery = "Select * from Linhvuc"; OleDbDataAdapter adap = new OleDbDataAdapter(strquery, dbconn); dbconn.Close(); DataTable dt = new DataTable(); adap.Fill(dt); cboLinhvuc.DataSource = dt; cboLinhvuc.DataBind(); } //Hàm lấy data lên lưới tùy thuộc vào DropDownList Lĩnh vực protected void BindGrid() { string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); dbconn.Open(); string strquery = "Select * from Bantin where linhvuc = '" + CboLinhvuc.SelectedValue +"'"; OleDbDataAdapter adap = new OleDbDataAdapter(strquery, dbconn); dbconn.Close(); DataTable dt = new DataTable(); adap.Fill(dt); gvBantin.DataSource = dt; gvBantin.DataBind(); } ii. Sự kiện Click của nút Tìm //Khi nhấn nút Tìm thì gọi hàm BindGrid protected void cmdTim_Click(object sender, EventArgs e) { BindGrid(); } iii. Phân trang protected void gvBantin_PageIndexChanging(object sender, GridViewPageEventArgs e) { gvBantin.EditIndex = e.NewPageIndex; BindGrid(); } Dzoaõn Thanh 60
  62. LẬP TRÌNH WEB iv. Khi nhấn link Delete của tin nào thì sẽ xóa tin đó. // Khi nhấn vào Delete trên lưới thì Xóa bản tin protected void gvBantin_RowDeleting(object sender, GridViewDeleteEventArgs e) { //Chọn Properties và đặt thuộc tính DataKeyNames của lưới là tên của trường chứa khóa chính //Ví dụ : Mabantin //Lấy giá trị khóa của dòng khi chọn delete trên dòng đó Object objKey = gvBantin.DataKeys[e.RowIndex].Value; string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); dbconn.Open(); string strquery = "delete from Bantin where mabantin ='" + objKey + "'"; OleDbCommand cmd = new OleDbCommand(strquery, dbconn); cmd.ExecuteNonQuery(); dbconn.Close(); gvBantin.EditIndex = -1; BindGrid(); } v. Khi nhấn Edit của một tin, chuyển tới trang upload.aspx để chỉnh sửa nội dung của tin đó. protected void gvBantin_RowEditing(object sender, GridViewEditEventArgs e) { //Lấy giá trị khóa của dòng khi chọn Edit trên dòng đó Object objKey = this.gvBantin.DataKeys[e.NewEditIndex].Value; //Gửi Khóa của tin đó tới trang update.aspx Response.Redirect("~/webmaster/update.aspx?id=" + objKey,false); } F5 > Chạy chương trình >> Đăng nhập >> Cập nhật bản tin Dzoaõn Thanh 61
  63. LẬP TRÌNH WEB 6. Tạo trang Chỉnh sửa, cập nhật một bản tin (update.aspx) o Click phải chuột lên thư mục Webmaster chọn – Add new item • Template :WebFrom • Name : update.aspx • Language : Visual C# • Check vào Select MasterPage o Trang update.aspx được thiết kế như sau: - DropdownList Lĩnh vực - TextBox tiêu đề - Control Free TextBox Nội dung tóm tắt - Control Free TextBox Nội dung - Image Hình ảnh để hiển thị hình hiện tại - Lable Hìn ảnh hiển thị tên hình hiện tại - FileUpload để thay đổi hình khác - TextBox chú thích hình Dzoaõn Thanh 62
  64. LẬP TRÌNH WEB  Hoạt động : i. Nhận Id (thuộc tính Khóa) từ trang Edit_Bantin.aspx, kết nối database lấy dữ liệu hiển thị lên các control ii. Khi nhấn nút lưu, sẽ update dữ liệu trên các control xuống database, và upload hình khác vào thư mục Upload nếu như thay đổi hình  Cài đặt: i. Khi trang web được load lên lần đầu, dùng đối tượng Request để đón nhận giá trị từ trang khác gởi tới protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string strKey = ""; // kiểm tra giá trị từ trang Edit_Bantin.aspx chuyển tới Dzoaõn Thanh 63
  65. LẬP TRÌNH WEB if (Request.Params["id"] != null) { strKey = Request.Params["id"].ToString(); // Gán strKey = giá trị nhận được cboLinhvuc.DataTextField = "Tenlinhvuc"; cboLinhvuc.DataValueField = "Malinhvuc"; GetLinhvuc(); // Gọi hàm Load dữ liệu lên Cbolinhvuc LoadData(strKey); // Gọi hàm Load dữ liệu lên cho các control khi đã nhận được khóa } } } protected void GetLinhvuc() { string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); dbconn.Open(); string strquery = "Select * from Linhvuc"; OleDbDataAdapter adap = new OleDbDataAdapter(strquery, dbconn); dbconn.Close(); DataTable dt = new DataTable(); adap.Fill(dt); cboLinhvuc.DataSource = dt; cboLinhvuc.DataBind(); } private void LoadData(string key) { string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); dbconn.Open(); string strquery = "Select * from Bantin where mabantin = '" + key + "'"; OleDbDataAdapter adap = new OleDbDataAdapter(strquery, dbconn); dbconn.Close(); DataTable dt = new DataTable(); adap.Fill(dt); foreach (DataRow dr in dt.Rows) { txtTieude.Text = dr["tieude"].ToString(); txtNoidungtomtat.Text = dr["Noidungtomtat"].ToString(); txtNoidung.Text = dr["Noidung"].ToString(); imgHinhanh.ImageUrl = "~/Upload/" + dr["Hinhanh"].ToString(); lblHinhanh.Text = dr["Hinhanh"].ToString(); txtChuthichhinh.Text = dr["Chuthichhinh"].ToString(); } } Dzoaõn Thanh 64
  66. LẬP TRÌNH WEB ii. Sau khi chỉnh sửa thông tin, nhấn nút Lưu, dữ liệu mới sẽ được cập nhật xuống database và hình ảnh mới vào thư mục Upload (nếu có) protected void cmdLuu_Click(object sender, EventArgs e) { //Gọi hàm cập nhật dữ liệu mới xuống database SaveData(); // Gọi hàm upload hình mới vào thư mục Upload nếu có SaveFileUpload(); } protected void SaveFileUpload() { string strFileName; if (txtFileUpload.FileName != "") { strFileName = Server.MapPath("~/Upload\\" + txtFileUpload.FileName); txtFileUpload.PostedFile.SaveAs(strFileName); } } private void SaveData() { string strKey = ""; // kiểm tra giá trị từ trang Edit_Bantin.aspx chuyển tới if (Request.Params["id"] != null) { strKey = Request.Params["id"].ToString(); // Gán strKey = giá trị nhận được } string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); dbconn.Open(); string strquery = "Update Bantin"; strquery += " set tieude = '" + txtTieude.Text + "',"; strquery += " Noidungtomtat = '" + txtNoidungtomtat.Text + "',"; strquery += " Noidung ='" + txtNoidung.Text + "',"; strquery += " Hinhanh ='" + txtFileUpload.FileName + "',"; strquery += " Chuthichhinh ='" +txtChuthichhinh.Text + "',"; strquery += " Linhvuc ='" + cboLinhvuc.SelectedValue + "'"; strquery += " where mabantin = '" + strKey.ToString() + "'"; OleDbCommand cmd = new OleDbCommand(strquery, dbconn); cmd.ExecuteNonQuery(); dbconn.Close(); } F5 >> Chạy chương trình>> Đăng nhập >> Cập nhật Bản tin >> Edit một bản tin Dzoaõn Thanh 65
  67. LẬP TRÌNH WEB Dzoaõn Thanh 66
  68. LẬP TRÌNH WEB Lập trình Internet với Cookies Cookie thường được dùng để xác định một user. Cookie là một tập tin nhỏ mà server nhúng vàomáy tính của user. Mỗi lần một máy tính yêu cầu một trang web với một trình duyệt, nó sẽ gửicookie đi theo. 1. Kiểm tra trình duyệt của user có cho phép sử dụng Cookies hay không If (Request.Browser.Cookies == true) { // Trình duyệt có hỗ trợ cookies } 2. Nếu trình duyệt hỗ trợ, kiểm tra có tồn tại cookie chưa if (Request.Cookies["name"] !=null) { // Tồn tại cookie khóa name } 3. Nếu cookie chưa tồn tại o Tạo mới cookie HttpCookie cookie = new HttpCookie("name","abc"); Hoặc HttpCookie cookie1 = new HttpCookie"name"); cookie.Value ="abc"; o Thiết lập thời gian tồn tại của cookie cookie.Expires = new DateTime.Now.AddDays(30); // 30 ngày Lưu ý: Nếu Expires là thời điểm hiện tại thì cónghĩa là xoá cookie o Lưu cookie vào máy của user: Response.Cookies.Add(cookie); 4. Nếu cookie đã tồn tại lấy thông tin của cookie hiển thị lên web String s = Request.Cookies["name"].Value ; Ứng dụng vào đề tài: Thiết kế lại trang Login.aspx như sau: - TextBox, Checkbox, Button, Literal và control Valadation để kiểm tra dữ liệu Dzoaõn Thanh 67
  69. LẬP TRÌNH WEB Cài đặt lại trang Login.aspx như sau: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.Browser.Cookies) // Trình duyệt có hỗ trợ cookies hay không { if (Request.Cookies["user"] != null && Request.Cookies["pass"] != null) { HttpCookie cookie_user = new HttpCookie("user"); // Thiết lập thời gian tồn tại của cookie cookie_user.Expires = DateTime.Now.AddDays(30); //30 ngày // Lưu cookie vào máy của user Response.Cookies.Add(cookie_user); //Lấy cookie user đã tồn tại gán vào text Username txtUsername.Text = Request.Cookies["user"].Value; // tương tự Password HttpCookie cookie_pass = new HttpCookie("pass"); cookie_pass.Expires = DateTime.Now.AddDays(30); Response.Cookies.Add(cookie_pass); txtPassword.Text = Request.Cookies["pass"].Value; } } } } private void CheckLogin() { string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;"; strconn += "Data Source=" + Server.MapPath("~/App_Data/tintuc.mdb"); OleDbConnection dbconn = new OleDbConnection(strconn); string strquery = "Select * from Taikhoan"; OleDbDataAdapter adap = new OleDbDataAdapter(strquery, dbconn); DataTable dt = new DataTable(); adap.Fill(dt); foreach (DataRow dr in dt.Rows) { Dzoaõn Thanh 68
  70. LẬP TRÌNH WEB if ((txtUsername.Text) == dr["id"].ToString() && txtPassword.Text == dr["pass"].ToString()) { if (chkGhinho.Checked) // Nếu người dùng check vào Ghi nhớ { //Lưu cookie user HttpCookie cookie_user = new HttpCookie("user", txtUsername.Text); cookie_user.Expires = DateTime.Now.AddDays(30); Response.Cookies.Add(cookie_user); //Lưu cookie pass HttpCookie cookie_pass = new HttpCookie("pass", txtPassword.Text); cookie_pass.Expires = DateTime.Now.AddDays(30); Response.Cookies.Add(cookie_pass); } Else // người dùng không check vào ghi nhớ { //Xóa cookie user HttpCookie cookie_user = new HttpCookie("user", ""); cookie_user.Expires = DateTime.Now; Response.Cookies.Add(cookie_user); //Xóa cookie pass HttpCookie cookie_pass = new HttpCookie("user", ""); cookie_pass.Expires = DateTime.Now; Response.Cookies.Add(cookie_pass); } Session["Login"] = true; Response.Redirect("Default.aspx", false); return; } } //Thông báo lỗi khi thông tin đăng nhập không hợp lệ lblLoi.Text = " Invalid Account "; } protected void cmdLogin_Click(object sender, EventArgs e) { CheckLogin(); } Dzoaõn Thanh 69
  71. LẬP TRÌNH WEB MỤC LỤC Chương 1: GIỚI THIỆU ASP.NET 1 1. Giới thiệu ASP.NET 1 2. Các yếu tố đặc biệt của ASP.NET 1 3. Những đặc điểm mới của ASP.NET 4 4. Web Site trong Visual Studio.Net 6 5. Trình soạn mã Visual Studio.Net 10 6. Mô hình mã của trang ASP.NET 14 7. Quy trình xử lý trang ASP.NET 15 8. Tìm hiểu thuộc tính IsPostBack và IsCrossPagePostBack 16 9. Tìm hiểu khái niệm ViewState 16 10. Cấu trúc tập tin global.asax 17 Chương 2: CÁC CONTROL TRONG ASP.NET 19 1. Server control 19 2. ASP.NET Server control 20 2.1 Điều khiển cơ bản 21 2.2 Điều khiển thông dụng 22 3. Các Server control kiểm tra dữ liệu 29 4. Mộ số điều khiển khác 36 Chương 3: CÁC ĐỐI TƯỢNG TRONG ASP.NET 42 1. Respone 42 2. Request 43 3. Server 44 4. Application 45 Chương 4: ASP.NET & ADO.NET 47 1. Các công nghệ truy xuất dữ liệu 47 2. Các đối tượng của ADO.NET 49 3. Lưu trữ và xử lý dữ liệu 55 4. SqlDataSource & AccessDataSource 57 Chương 5: CÁC CONTROL TRÌNH BÀY DỮ LIỆU 66 1. GridView 66 2. DetailsView & FormView 81 3. DataList 83 4. Master 85 Chương 6: HƯỚNG DẪN THỰC HÀNH 87 Dzoaõn Thanh 70