- Mở file Models/IdentityModel.cs - IdentityUser là một phần của ASP.NET Identity, hỗ trợ xử lý các chức năng cơ bản liên quan tới việc xác thực người dùng như đăng ký, đăng nhập, đổi mậ
Trang 1MỤC LỤC
1 LÀM QUEN VỚI ỨNG DỤNG WEBSITE ASP NET MVC 2
1.1 Cơ bản về MVC 5 và các yêu cầu cần thiết để viết Web Application MVC 5 2
1.1.1 Yêu cầu 2
1.1.2 Các bước cài đặt MVC5 2
2 VIẾT TRANG WEB QUẢN LÝ SÁCH (BOOK) VỚI ASP NET MVC 9
3 THỰC HÀNH THEO DỰ ÁN WEBSITE BIGSCHOOL 22
3.1 Mục tiêu bài thực hành 22
3.2 Công nghệ sử dụng 22
3.3 Mô tả yêu cầu 23
3.4 Phần mềm 23
3.5 Phân tích yêu cầu của ứng dụng BigSchool 23
3.5.1 Xác định các usecase trong dự án 23
3.5.2 Phân tích use case 24
3.5.3 Thứ tự use-case sẽ thực hiện 25
3.6 Xây dựng ứng dụng bằng ASP NET MVC 25
3.6.1 Tạo cơ sở dữ liệu theo mô hình EF Code First 25
3.6.2 Use-case: Thêm mới khóa học 30
3.6.3 Ghi đè CSS mặc định của Bootstrap 46
3.6.4 Thêm mới thuộc tính trong Asp.Net Identity Users 49
3.6.5 Hiển thị danh sách các khóa hoặc sắp diễn ra tại trang chủ 50
3.6.6 Bổ sung thuộc tính Name vào màn hình đăng ký, cho phép người dùng nhập tên (Form Sign up) 51 3.6.7 Chỉnh sửa giao diện trang chủ: danh sách khóa học sắp diễn ra 54
3.6.8 Use-case: Đăng ký tham dự khóa học 56
3.6.9 Use-case theo dõi Giảng viên 64
3.6.10 Xem danh sách khóa học đăng ký tham dự 70
3.6.11 Use-case Quản lý Khóa học (Xóa, cập nhật) 74
3.6.12 Use-case thông báo (notification) 87
3.6.13 Tách file javascript trong ứng dụng 93
Trang 21 LÀM QUEN VỚI ỨNG DỤNG WEBSITE ASP NET MVC
1.1 Cơ bản về MVC 5 và các yêu cầu cần thiết để viết Web Application MVC 5
website http://www.microsoft.com/en-us/download/41532 tải gói nâng cấp và cài đặt theo hướng dẫn
Chú ý: Tất cả các hình ảnh trong các bài LAB đều được thực hiện trên Visual Studio 2013 & Visual
Studio 2015
Bước 1: Tạo mới ứng dụng ASP.NET MVC 5
Bạn có thể tạo mới ứng dụng web ASP MVC 5 trên cả hai phiên bản Visual Studio 2013, 2015 hoặc Visual Studio 2013, 2015 Express
Để tạo mới một ứng dụng MVC
- Chọn File New Project
Trang 3
Trong phần các mẫu Teamplate đã được cài đặt, chọn Visual C# Web Template
Sau khi tạo mới Web Application MVC5, cửa sổ tiếp theo hiện lên chọn MVC
Trang 4
Sau khi chọn xong các bước trên, bạn có được ứng dụng mẫu MVC Application với các thành phần mở rộng
được thêm vào sẵn, cấu trúc như hình
Trang 5
Cấu trúc của một MVC Web Application
/Controllers Thư mục chứa các lớp xử lý gọi là Controller
/Models Thư mục chứa các lớp đối tượng Model
/Views Thư mục đặt các mẫu giao diện View
/Scripts Thư mục chứa các bộ thư viện javascript được tích hợp vào sẵn
của MVC hoặc là nơi bạn tổ chức và đặt các thư viện Javascript
mà mình tự phát triển /fonts Chứa các mẫu font của thư viện Bootstrap
/Contents Đặt CSS, hình ảnh hoặc các file javascript
/App_Data Chứa database local
Trang 6nén CSS, javascript để giảm kích thước)
Trang 7Cấu trúc xử lý để chạy một trang web MVC mặc định là :
http://Localhost:Port:/{Controller}/{Action}/{Id}
Trang 92 VIẾT TRANG WEB QUẢN LÝ SÁCH (BOOK) VỚI ASP NET MVC
Tạo Model Book
File Hình ảnh bìa sách (Sinh viên tự lấy một số hình ảnh đưa vào thư mục như hình để demo)
Trang 10Đặt tên BooksController.cs
Trang 11Nhấn chuột phải vào hàm ListBooks, chọn Add View…
Trang 12File Views/Books/ListBooks.cshtml
File App_Start/RouteConfig.cs
Trang 13Xem kết quả khi chạy website
Xem kết quả trên thiết bị di động
Trang 14Xem chi tiết một cuốn sách (Book Detail)
Chỉnh sửa file Views/Books/ListBook.cshtml
Trang 15Xem Link
Trang 16Trang Views/Books/Detail.cshtml
Trang chỉnh sửa Sách (Edit Book)
File Views/Books/ListBooks.cshtml
Trang 17File BooksController.cs
Kiểm tra file Views/Books/Edit.cshtml đã tồn tại
Trang 18Chạy ứng dụng, kiểm tra kết quả
Viết hàm lưu kết quả sau khi chỉnh sửa
* Ràng buộc dữ liệu nhập
File Models/Book.cs
Trang 19File Views/Books/Edit.cshtml
Chạy ứng dụng và kiểm tra kết quả
Trang 20*Viết hàm lưu kết quả
File Controllers/BooksController.cs
Trang 21Chạy ứng dụng để kiểm tra kết quả, lưu thành công sẽ trả về trang danh sách với kết quả mới
Trang 223 THỰC HÀNH THEO DỰ ÁN WEBSITE BIGSCHOOL
3.1 Mục tiêu bài thực hành
- Xây dựng giao diện người sử dụng: HTML, CSS, Bootstrap
- Xây dựng các cấu trúc tái sử dụng
- Mô hình Entity Framework code First work-flow
- Restful APIs
- Lập trình Ajax
- Bảo mật, phân quyền
- Thiết kế phần mềm hướng đối tượng
Trang 233.3 Mô tả yêu cầu
Xây dựng mạng xã hội quản lý và theo dõi các khóa học trực tuyến (gọi tắt là BigSchool) Webstie Mạng xã hội học tập BigSchool cung cấp các chức năng cơ bản:
- Người học có thể dễ dàng theo dõi các khóa học của Giảng viên yêu thích Thêm khóa học vào danh sách đăng ký tham dự Theo dõi Giảng viên để nhận các thông tin về khóa học mới
- Người học có thể xem tất cả các khóa học sắp được mở theo giảng viên hoặc tìm kiếm theo các thông tin như tên giảng viên, chủ đề khóa học, địa điểm khóa học
- Giảng viên có thể đăng ký mở khóa học, bao gồm các thông tin ngày/ giờ, địa điểm
và chủ đề của khóa học Giảng viên có trang quản lý khóa học để có thể chỉnh sửa, cập nhật khóa học
3.4 Phần mềm
Sử dụng các phần mềm sau để thực hành:
- IDE: Visual studio community 2015
- MSSQL Server >= 2008
- [Tùy chọn] cài đặt các Extension cho VS 2015 (Tool Extension & Update)
o ReSharper (free 30 trial license)
o Productivity Power Tools 2013 (free)
o Web Essentials 2015 (free)
3.5 Phân tích yêu cầu của ứng dụng BigSchool
3.5.1 Xác định các usecase trong dự án
- BigSchool là một dự án giúp quản lý và theo dõi khóa học
- Giảng viên đăng nhập và quản lý khóa học Khi thêm một khóa học có các thông tin địa điểm, thời gian, chủ đề khóa học
- Giảng viên có trang quản lý khóa học bao gồm: Thêm, sửa, xóa khóa học
- Học viên xem các khóa học, tìm kiếm theo tên giảng viên, chủ đề, địa điểm
- Học viên có thể xem chi tiết một khóa học và đăng ký tham dự
- Học viên có thể theo dõi Giảng viên Khi theo dõi Giảng viên nào đó, học viên có thể xem các khóa học sắp tới của giảng viên đó trong BigSchool Feed
Trang 243.5.2 Phân tích use case
3.5.2.1 Chứng thực người dùng (sử dụng ASP.NET Identity Package, được tích hợp trong ASP.NET
- Thay đổi mật khẩu
- Thay đổi thông tin cá nhân
- Xem chi tiết khóa học
3.5.2.3 Đăng ký tham gia khóa học
- Đăng ký tham dự
- Hủy đăng ký tham dự
- Xem các khóa học đã đăng ký tham dự
3.5.2.4 Theo dõi
- Theo dõi một giảng viên
- Bỏ theo dõi
- Danh sách người theo dõi
- Trang tin theo dõi (Big School Feed)
Trang 25Hủy đăng ký tham dự
Theo dõi giảng viên
Danh sách người theo dõi
Bỏ theo dõi
Tìm kiếm Big school Feed Xem chi tiết
khóa học
3.6 Xây dựng ứng dụng bằng ASP NET MVC
Tạo mới Project ASP NET MVC trong IDE Visual studio 2015 Đặt tên project là BigSchool, và thực hiện theo hướng dẫn:
3.6.1 Tạo cơ sở dữ liệu theo mô hình EF Code First
- Tool/ Nuget package manager/ package manager console
o enable-migrations
Mỗi sự thay đổi trên domain model sẽ tạo mới bản log migration và chạy migration để cập nhật database
Trang 26- Mở file Models/IdentityModel.cs
- IdentityUser là một phần của ASP.NET Identity, hỗ trợ xử lý các chức năng cơ bản liên quan tới việc xác thực người dùng như đăng ký, đăng nhập, đổi mật khẩu, phân quyền,… vv
- Mở file Web.config cấu hình trỏ liên kết tới máy chủ chạy cơ sở dữ liệu, với tên tài
khoản và mật khẩu đăng nhập vào hệ quản trị CSDL
<connectionStrings>
<add name="DefaultConnection"connectionString="Data AT2MHH8;Initial Catalog=BigSchool;user id = sa; pwd = anh@; Integrated Security=True" providerName="System.Data.SqlClient" />
Source=DESKTOP-</connectionStrings>
- Mở Package Manager Console để tạo các Model của User
o Add-migration ‘InitialModel’
Trang 27- Mở Package Manager Console chạy lệnh
o update-database: Tạo bảng trong CSDL MSSQL Server theo file migration vừa mới tạo ở bước trên (sau khi chạy lệnh này, mở chương trình quản lý database để kiểm tra CSDL BigSchool vừa được tạo)
- Tạo các Domain class của ứng dụng: Nhấn chuột phải vào thư mục Models Add
Class: đặt tên là Course.cs
Trang 28- Nội dung file Course.cs
- Tách Class Category thành file mới, nằm trong thư mục Models
Trang 29- Mở File Models/IdentityModel.cs
o Tách Class ApplicationDbContext ra một file riêng, thêm domain class
Course và Category
- Đổi tên File Models/IdentityModes.cs thành tên mới
Models/ApplicationUser.cs (tên lớp và tên file nên giống nhau để dễ quản lý
theo dõi thay đổi)
- Kết quả thư mục Models có
- Mở package Manager Console để tạo bản cập nhật database
o add-migration 'CreateTableCourse'
Trang 30- Kết quả (xem database)
3.6.2 Use-case: Thêm mới khóa học
Một khóa học bao gồm các thông tin như: Chủ đề (chọn từ danh sách), địa điểm,
thời gian
3.6.2.1 Tạo mẫu dữ liệu các chủ đề của khóa học
- Mở package manager control
o add-migration PopulateCategoryTable
- Mở file migration PopulateCategoryTable.cs
- Mở Package manager control, cập nhật dữ liệu cho bảng Category
o update-database
Trang 31- Kiểm tra dữ liệu trong bảng Category
3.6.2.2 Tạo Form thêm khóa học với Bootstrap
- Nhấn chuột phải vào thư mục Controller Chọn Add Controller Chọn
MVC5 Empty Controller
Trang 32- Đổi tên ActionResult Index Create, nhấn chuột phải vào tên Create Chọn Add View
- Thư mục mới được tạo ra Views/Courses và tên View vừa tạo bước trên
Create.cshtml
Trang 33- Mở file Views/Courses/Create.cshtml, nhấn F5 để xem kết quả từ trình duyệt
- Sửa menu Contact Thành menu Create Course
o Mở file Views/Shared/_Layout.cshtml
- Mở trình duyệt, nhấn F5 để xem lại kết quả
- Mở file Views/Courses/Create.cshtml, chỉ định Model là Course
- Thêm các thành phần của khóa học như: địa điểm, thời gian
Trang 34- Được kết quả
- Xây dựng Form với Bootstrap (xem thêm bootstrap tại địa chỉ:
http://getbootstrap.com/
Sử dụng ViewModel
Trang 35- Tiếp tục xây dựng Form khóa học
- Tại Trường DateTime của Khóa học, cho phép người dùng nhập vào 2 giá trị
(ngày học và thời gian học)
- Tạo mới folder tên là ViewModels tại thư mục gốc
- Tạo File ViewModels/CourseViewModel.cs với nội dung:
- Sửa trang View thêm khóa học Views/Course/Create.cshtml (sử dụng model
mới CourseViewModel)
Trang 36Thêm danh sách lựa chọn (Drop – down List) danh mục của khóa học
- Chỉnh sửa file ViewModels/CourseViewModel.cs
Trang 37- Mở file Controllers/CourseController.cs
- Chạy ứng dụng và xem kết quả
Trang 38* Thêm nút button Lưu kết quả trên Form (views/Course/Create.cshtml)
* Lưu dữ liệu khóa học
Xác thực quyền đăng nhập với ASP.NET Identity Chỉ cho phép người dùng có tài
khoản và đã đăng nhập vào hệ thống mới có thể thêm khóa học
- File Controllers/CourseController.cs
Trang 39- Chạy ứng dụng website, vào trang thêm khóa học
(http://localhost:50528/Courses/Create), hệ thống sẽ yêu cầu đăng nhập
- Tạo tài khoản mới (Register as a new user) và đăng nhập trước khi vào trang
thêm mới khóa học
- File Views/Course/Create.cshtml
Trang 40- File Controllers/CoursesController.cs
- Chạy ứng dụng web, kiểm tra kết quả (http://localhost:50528/Courses/Create)
Trang 41* Ràng buộc dữ liệu nhập trên form thêm khóa học
Server-side Validation
- File ViewModels/CourseViewMode.cs
Hiển thị thông báo nếu không nhập dữ liệu có ràng buộc (bắt buộc nhập)
- File Views/Course/Create.cshtml
Trang 42- File Controllers/CoursesController.cs (Kiểm tra dữ liệu nhập phía Server, trước
khi lưu vào cơ sở dữ liệu, nếu nhập sai yêu cầu lỗi sẽ được gửi lại trang đang thao
tác)
Trang 43- Chạy ứng dụng web, thêm khóa học (chú ý: không nhập địa điểm hoặc các trường ràng buộc thì sẽ báo lỗi)
Trang 44- Chạy ứng dụng web, kiểm tra ràng buộc custom validation tại ô Ngày, tháng khóa học (ngày nhập phải đúng định dạng dd/mm/yyyy và phải lớn hơn ngày hiện tại)
- Tương tự tạo Custom Validation cho ô nhập Time (Tạo mới file đặt tên là
ValidTime.cs nằm trong thư mục ViewModels) và chỉnh sửa file
CourseViewModel.cs (ViewModels/CourseViewModel.cs)
Trang 45- Chạy ứng dụng web, nhập giá trị vào ô Time không hợp lệ và kiểm tra kết quả
* Client-side Validation (kiểm tra ràng buộc dữ liệu nhập ngay phía client trước khi gửi về server)
- File Views/Course/Create.cshtml
- Chạy ứng dụng, kiểm tra kết quả
Trang 46* BẢO MẬT
Phòng chống lỗi tấn công CROSS SITE REQUEST FORGERY - CSRF (Dữ liệu
được gửi lên server, không phải từ web page trong hệ thống)
- File Views/Course/Create.cshtml, File Controllers/CoursesController.cs
3.6.3 Ghi đè CSS mặc định của Bootstrap
- Mở website bằng trình duyệt Chorme, nhấn chuột phải vào vùng muốn thay đổi CSS, chọn Inspect
Trang 47- Điều chỉnh các thành phần CSS trên giao diện phù hợp theo mong muốn
- Copy nội dung CSS đã điều chỉnh, mở file Contents/Site.css hoặc tạo file CSS mới
để ghi đè các giá trị CSS mặc định của Bootstrap
- File Contents/Site.css
Trang 48- Chạy lại ứng dụng để xem sự thay đổi giao diện
Điều chỉnh giao diện trang khung của website (Layout)
- File Views/Shared/ LoginPartial.cshtml
- Kết quả thanh menu
Trang 493.6.4 Thêm mới thuộc tính trong Asp.Net Identity Users
Các thuộc tính mặc định của bảng ASPNETUSERs (Bảng này chưa thông tin người dùng trong hệ thống như Giảng viên hoặc Học viên)
Bổ sung thêm thuộc tính Name (họ tên) vào bảng
- File Models/ApplicationUser.cs
- Mở Package Control Manager chạy lệnh
Trang 51- Chạy ứng dụng web, xem kết quả trang chủ (http://localhost:50528/)
3.6.6 Bổ sung thuộc tính Name vào màn hình đăng ký, cho phép người dùng nhập tên (Form
Sign up)
- File Models/AccountViewModels.cs, Class RegisterViewModel
Trang 52- File Views/Account/Register.cshtml
Trang 53- File Controllers/AccountController.cs
- Chạy ứng dụng web, trang đăng nhập để xem kết quả
(http://localhost:50528/Account/Register)
Trang 543.6.7 Chỉnh sửa giao diện trang chủ: danh sách khóa học sắp diễn ra
- File Views/Home/index.cshtml
Trang 55- File Content/Site.css
- Chạy ứng dụng web để xem kết quả (trang chủ)
Trang 563.6.8 Use-case: Đăng ký tham dự khóa học
Quan hệ nhiều – nhiều giữa hai bảng User và Course, Tạo bảng mới Attendance
(Tham dự)
- Tạo mới File Models/Attendance.cs
Attendance
Course User
Trang 57- Sửa Models/ApplicationDbContext.cs
- Mở Package Manager Console chạy lệnh
o Add - Migration AddAttendance
o Update – database
Trang 58Chức năng Học viên đăng ký tham dự khóa học (sử dụng Ajax & Restful API để không phải tại lại trang)
- Thêm mới File Controllers/AttendancesController.cs Loại teamplate: Web
API 2 Controller
- Chọn Web API 2 Controller - Empty, đặt tên AttendancesController
- File Readme.txt hướng dẫn Enable Web API trong project
Trang 59- Mở File Global.asax, copy đoạn code phía trên đưa vào với nội dung
- File Controllers/AttendancesController.cs
Trang 60Sử dụng công cụ Postman để Test API
- Link tải Postman (https://www.getpostman.com/)
- Lấy thông tin đăng nhập tài khoản, nhấn nút SEND
Trang 61- Lấy thông tin bảo mật Cross-Site Request Forgery (CSRF) (một phần của
ASP.NET Identity để bảo mật, phòng tránh lỗi CSRF), nhấn nút SEND
- Mở Postman và nhập các thông tin
Trang 62- Nhấn nút SEND và xem kết quả kiểm tra test API khi thêm một dòng đăng ký mới
Trang 63- Build ứng dụng và thử Test lại kết quả với Postman
*Thêm nút nhấn đăng ký tham gia khóa học
- File Views/Home/Index.cshtml
- Tạo thư mục DTOs nằm tại thư mục gốc ứng dụng Tạo file
DTOs/AttendanceDto.cs (DTO: Data transfer object, đóng gói và trao đổi dữ liệu
đối tượng giữa các tầng của ứng dụng)