GIỚI THIỆU ĐỀ TÀI
1 Lý do chọn đề tài
Trong bối cảnh thị trường ngày nay, cạnh tranh trong kinh doanh ngày càng trở nên khốc liệt Các doanh nghiệp, đặc biệt là những công ty lớn, đang tập trung tối đa vào việc đáp ứng nhu cầu và mong đợi của khách hàng một cách tốt nhất.
So với kinh doanh truyền thống, thương mại điện tử mang lại sự tiện lợi, nhanh chóng và tiết kiệm chi phí hơn Việc áp dụng công nghệ thông tin không chỉ giúp quảng bá sản phẩm hiệu quả mà còn nâng cao danh tiếng doanh nghiệp một cách nhanh chóng Hơn nữa, sự kết hợp với dịch vụ giao hàng tận nơi qua bưu điện và ngân hàng đã thúc đẩy sự phát triển mạnh mẽ của mô hình này.
Nhằm đáp ứng nhu cầu mua sắm ngày càng tăng và sự phát triển của công nghệ thông tin, chúng tôi đã quyết định xây dựng một website chuyên bán quần áo thời trang để phục vụ tốt nhất cho khách hàng.
2 Phương pháp nghiên cứu và xây dựng
Tìm hiểu về ASP.NET MVC, mô hình MVC
Tìm hiểu về cách thức hoạt động của client – Server
Tìm hiểu về cách thức lưu dữ liệu và sử dụng dữ liệu trong SQL Server
Sử dụng Framework ASP.NET MVC để xây dựng website theo mô hình MVC
Website cho phép khách hàng đăng nhập truy cập trang web,chọn món đồ mình muốn và thanh toán mua hàng.
CƠ SỞ LÝ THUYẾT
View
Giao diện (theme) này được thiết kế dành cho người sử dụng, cho phép người dùng truy cập thông tin dữ liệu của MVC thông qua các thao tác truy vấn như tìm kiếm hoặc tương tác trên các trang web.
Trong các ứng dụng web, MVC View đóng vai trò quan trọng trong việc tạo ra các thành phần HTML và ghi nhận hoạt động của người dùng để tương tác với Controller Tuy nhiên, View không trực tiếp liên hệ với Controller và không lấy dữ liệu từ Controller, mà chỉ hiển thị yêu cầu chuyển giao cho Controller.
Model
Model là phần lưu trữ dữ liệu của ứng dụng, đóng vai trò cầu nối giữa View và Controller Nó có thể được thể hiện dưới dạng cơ sở dữ liệu hoặc chỉ đơn giản là một file.
XML bình thường Model thể hiện rõ các thao tác với cơ sở dữ liệu như cho phép xem, truy xuất, xử lý dữ liệu,…
Controller
Bộ phận này chịu trách nhiệm xử lý yêu cầu từ người dùng thông qua giao diện (view) và cung cấp dữ liệu phù hợp Đồng thời, Controller cũng đóng vai trò kết nối với model để đảm bảo tính nhất quán trong việc xử lý thông tin.
Luồng tương tác giữa các thành phần trong MVC.
Ví dụ: Chức năng thêm bài viết mới trong trang quản trị website Nơi đây có 2 trường nhập về tiêu đề và nội dung bài viết, thì trong đó:
View sẽ hiển thị ra phần nhập form tiêu đề và nội dung.
Controller lấy dữ liệu từ 2 trường và gửi tới Model.
Model lúc này sẽ nhận dữ liệu từ Controller để lưu trữ trong cơ sở dữ liệu.
Razor
Razor là cú pháp đánh dấu cho phép nhúng mã máy chủ (Visual Basic và C#) vào trang web, giúp tạo nội dung web động nhanh chóng Được xây dựng trên nền tảng ASP.NET, Razor được thiết kế đặc biệt để phát triển ứng dụng web hiệu quả.
ViewBag, ViewData
ViewBag and ViewData are methods for passing model data from the Controller to the View in ASP.NET Additionally, developers can utilize TempData, as well as Session and Application State in Web Forms, to manage user session data or application-wide data effectively.
ViewData là phương thức chuyển dữ liệu từ Controller đến View, tự động gán khi gọi phương thức View trong action của Controller Trong View, người dùng có thể dễ dàng truy cập các giá trị được lưu trữ trong ViewData.
ViewData trong ASP.NET MVC được xử lý động trong thời gian chạy, vì vậy nó không cung cấp tính năng kiểm tra lỗi tại thời gian biên dịch và không có sự hỗ trợ thông minh Chức năng chính của ViewData là chuyển dữ liệu từ action của Controller sang View.
ViewBag là một cơ chế truyền dữ liệu từ Controller sang View, sử dụng kiểu động từ phiên bản C# 4.0, và là một vỏ bọc cho ViewData, cung cấp thuộc tính động Cả ViewData và ViewBag đều có thể được sử dụng để chuyển dữ liệu, nhưng ViewData là một đối tượng từ điển, trong khi ViewBag là thuộc tính động ViewData sử dụng chuỗi làm khóa để lưu trữ và truy xuất dữ liệu, trong khi ViewBag sử dụng các thuộc tính động Ngoài ra, ViewData yêu cầu đánh máy cho kiểu dữ liệu phức tạp và kiểm tra các giá trị rỗng, trong khi ViewBag không yêu cầu thao tác đánh máy cho kiểu dữ liệu phức tạp.
3 Layout for View in ASP.NET MVC
HTML Helper class
Lớp HtmlHelper cung cấp hỗ trợ cho việc hiển thị các điều khiển biểu mẫu HTML và thực hiện xác thực biểu mẫu trên trang web Bằng cách sử dụng lớp Trình trợ giúp HTML, người dùng có thể tạo các Điều khiển HTML theo chương trình trong View để hiển thị nội dung Mặc dù không bắt buộc phải sử dụng các lớp này để xây dựng ứng dụng ASP.NET MVC, nhưng chúng giúp phát triển nhanh chóng các khung nhìn So với các điều khiển ASP.NET Web Form, HTML Helpers nhẹ hơn vì không sử dụng ViewState và không có mô hình sự kiện.
HtmlHelper được chia làm ba loại: Inline HTML Helpers, Custom HTML Helpers, Built-in HTML Helpers.
Built-in HtmlHelper cũng được chia làm ba loại: Standard HTMLHelpers, Strongly Typed HTML Helpers, Templated HTML Helpers.
Standard and Strongly Typed HTML Helpers
HTML Helpers tiêu chuẩn được sử dụng để hiển thị các loại điều khiển HTML Các phương thức mở rộng của HTML Helpers cho phép người dùng sử dụng bất kỳ điều khiển nào theo nhu cầu.
HTML Helpers: Begin Form - End Form
Để tạo một biểu mẫu HTML, chúng ta có thể sử dụng BeginForm () vàCác phương thức mở rộng EndForm () của Html Helper.
Html.BeginForm trả về một đối tượng IDisposable, cho phép bạn sử dụng nó trong câu lệnh using C# Khi thoát khỏi khối lệnh using, Html.EndForm() sẽ được gọi tự động để xử lý.
Model class: Enum là một kiểu dữ liệu chứa một tập hợp các các giá trị được xác định bởi người lập trình.
HTML Helpers: Label bao gồm hai phương thức mở rộng
Phương thức Html.Label () tạo ra một phần tử cho một thuộc tính cụ thể của đối tượng mô hình.
Phương thức LabelFor helper là một phương thức mở rộng mạnh mẽ trong lập trình, cho phép tạo ra thẻ HTML label cho thuộc tính của đối tượng mô hình thông qua biểu thức lambda.
HTML Helpers: TextBox bao gồm hai phương thức mở rộng
Phương thức Html.TextBox () tạo ra phần tử với các thuộc tính tên, giá trị và html được chỉ định.
Phương thức TextBoxFor là một phương thức mở rộng mạnh mẽ trong lập trình, cho phép tạo ra phần tử đầu vào văn bản cho thuộc tính mô hình thông qua biểu thức lambda Nó liên kết trực tiếp thuộc tính của đối tượng mô hình với hộp văn bản, tự động hiển thị giá trị của thuộc tính trong hộp và cập nhật ngược lại khi có thay đổi.
HTML Helpers: DropDownList bao gồm hai phương thức mở rộng
Phương thức DropDownList () tạo ra một phần tử được chọn với tên cụ thể, các mục danh sách và các thuộc tính html.
Phương thức DropDownListFor là một phương thức mở rộng mạnh mẽ trong lập trình, cho phép tạo phần tử cho thuộc tính được chỉ định thông qua biểu thức lambda Phương thức này liên kết một đối tượng mô hình với thuộc tính kiểm soát danh sách thả xuống, tự động liệt kê các mục trong DropDownList dựa trên giá trị của thuộc tính đó.
Templated HTML Helpers and Model
Strongly Typed HTML Helper: Strong Typed Helper yêu cầu các biểu thức lambda Để sử dụng Strongly Typed Helper, trước tiên phải tạo Strongly Typed View.
Templated HTML Helper trong ASP.NET MVC cung cấp các công cụ hữu ích để kiểm soát cách dữ liệu được hiển thị cho người dùng, cho phép hiển thị hoặc chỉnh sửa dữ liệu mô hình một cách hiệu quả.
Layout for View
Một ứng dụng có thể duy trì tính nhất quán trong giao diện người dùng bằng cách giữ nguyên các phần chung như logo, tiêu đề, thanh điều hướng bên trái (hoặc bên phải) và phần footer trên toàn bộ ứng dụng.
ASP.NET MVC giới thiệu dạng xem Bố cục, cho phép tái sử dụng các phần giao diện người dùng chung, giúp giảm thiểu việc viết lại mã cho mỗi trang Dạng xem này hoạt động như trang chính của ứng dụng web ASP.NET.
Layout View giúp xác định một mẫu trang web chung, cho phép kế thừa trong nhiều View, từ đó tạo ra giao diện nhất quán cho nhiều trang trong ứng dụng.
Layout View giúp tối ưu hóa mã hóa bằng cách loại bỏ sự trùng lặp, từ đó nâng cao tốc độ phát triển và dễ dàng bảo trì Giao diện người dùng mẫu của Layout View bao gồm các phần như Đầu trang, Menu bên trái, thanh bên phải và chân trang, cùng với một trình giữ chỗ cho phần trung tâm có thể thay đổi động.
The razor layout view có phần mở rộng giống như các dạng xem khác:
cshtml hoặc.vbhtml Layout views được chia sẻ với nhiều dạng xem, vì vậy nó phải được lưu trữ trong Shared folder.
The layout view chứa html Doctype, head và body như html bình thường, điểm khác biệt duy nhất là gọi phương thức RenderBody() và
RenderSection() RenderBody hoạt động như một trình giữ chỗ cho các chế độ xem khác.
ViewStart.cshtml nằm trong thư mục Views và thiết lập trang bố trí mặc định cho tất cả các Views trong thư mục và các thư mục con Nó sử dụng thuộc tính Bố cục, cho phép chỉ định một đường dẫn hợp lệ đến bất kỳ trang Bố cục nào.
Rendering methods: được chia làm hai loại
Renderbody():Dạng xem bố trí phải bao gồm phương thức RenderBody ().
RenderSection(string name, bool required) cho phép hiển thị nội dung của phần được đặt tên và xác định tính bắt buộc của phần đó Hàm RenderSection() là một tùy chọn trong dạng xem Bố trí.
Layout.cshtml bao gồm phương thức RenderBody () và Phương thức RenderSection () Phương thức RenderSection chỉ định tên của một phần như LeftSection, MiddleSection và RightSection.
Index.cshtml xác định các phần được đặt tên thông qua việc sử dụng @section, trong đó tên của mỗi phần phải khớp với tên được chỉ định trong phương thức RenderSection của _Layout.cshtml.
Các phần được đặt tên trong Index.cshtml như LeftSection, RightSection và MiddleSection sẽ hiển thị tại các vị trí tương ứng khi phương thức RenderSection được gọi Phần còn lại của View Index, không nằm trong các phần được đặt tên, sẽ được hiển thị tại vị trí mà phương thức RenderBody() được gọi.
NuGet Packages
Một công cụ quan trọng cho các nền tảng phát triển hiện đại là cơ chế cho phép các nhà phát triển tạo, chia sẻ và sử dụng mã hiệu quả Đối với NET, bao gồm cả NET Core, Microsoft hỗ trợ NuGet như một cơ chế chia sẻ mã, xác định quy trình tạo, lưu trữ và sử dụng các gói cho NET, đồng thời cung cấp các công cụ cần thiết cho từng vai trò trong quy trình này.
NuGet cho phép lưu trữ gói một cách riêng tư trên đám mây, như Azure DevOps, hoặc trên mạng riêng và hệ thống tệp cục bộ Điều này đảm bảo rằng các gói chỉ có sẵn cho những nhà phát triển có quyền truy cập vào máy chủ, giúp cung cấp gói hàng cho một nhóm người tiêu dùng cụ thể.
Bundling and Minification
Kỹ thuật Bundling và Minification trong MVC 4 được giới thiệu nhằm cải thiện thời gian tải yêu cầu Bundling cho phép tải nhiều tệp tĩnh từ máy chủ chỉ trong một yêu cầu HTTP, giúp tối ưu hóa hiệu suất và giảm thiểu thời gian chờ đợi cho người dùng.
Kỹ thuật gói trong ASP.NET MVC cho phép tải nhiều hơn một tệp
JavaScript, jquery.js và bootstrap.min.js trong một yêu cầu, như được hiển thị bên dưới
Kỹ thuật Minification giúp tối ưu hóa kích thước tệp Script và CSS bằng cách loại bỏ khoảng trắng không cần thiết, xóa bình luận và rút gọn tên biến.
Minification giúp giảm kích thước tệp bằng cách loại bỏ khoảng trắng không cần thiết, nhận xét và rút ngắn tên biến.
Bundling types:MVC 5 bao gồm các lớp gói sau trong
ScriptBundle: ScriptBundle chịu trách nhiệm về JavaScript thu nhỏ của một hoặc nhiều tệp kịch bản.
StyleBundle: StyleBundle chịu trách nhiệm rút gọn CSS của một hoặc nhiều tệp bảng định kiểu.
DynamicFolderBundle: Đại diện cho một đối tượng Bundle ASP.NET tạo từ một thư mục chứa các tệp cùng loại.
Entity Framework is an open-source Object Relational Mapper (ORM) framework supported by Microsoft for NET applications, serving as a key component of the NET Framework.
Entity Framework ra đời nhằm hỗ trợ sự tương tác giữa các ứng dụng trên nền tảng NET với các cơ sở dữ liệu quan hệ
Entity Frmework chính là công cụ giúp ánh xạ giữa các đối tượng trong ứng dựng, phần mềm với các bảng của một Database quan hệ
Entity Framework có lớp ánh xạ chi tiết để có thể tùy chỉnh ánh xạ.
ORM là một công nghệ cho phép tương tác với các hệ quản trị cơ sở dữ liệu quan hệ thông qua ngôn ngữ lập trình hướng đối tượng mà không cần phải viết trực tiếp truy vấn SQL.
ORM hỗ trợ lập trình hai chiều, liên kết cấu trúc bảng với class, bảng ghi với object, và các thuộc tính với cột trong bảng Quá trình này cho phép ORM tự động sinh ra và thực hiện các truy vấn SQL, giúp lập trình viên chỉ cần nắm vững các thuật ngữ và khái niệm của ngôn ngữ lập trình hướng đối tượng Một trong những đặc điểm nổi bật của Entity Framework là khả năng này.
Tất cả cơ sở dữ liệu được biểu diễn thông qua một lớp con của DBContext, với mỗi bảng dữ liệu tương ứng với một đối tượng DbSet Mỗi hàng trong bảng là một đối tượng của lớp thực tế mà bạn đã xây dựng, trong khi các cột được thể hiện qua các thuộc tính của đối tượng đó Các thao tác này có thể được thực hiện tự động hoặc tùy chỉnh theo nhu cầu của bạn.
Bạn có thể thực hiện truy vấn dữ liệu bằng LINQ mà không cần sử dụng SQL Điều này giúp người dùng dễ dàng thực hiện các truy vấn CRUD từ mã C# thông qua các lớp mà không cần viết bất kỳ dòng SQL nào.
Thứ ba, công cụ Migration cho phép người dùng thực hiện các thao tác với cấu trúc dữ liệu một cách đơn giản và nhanh chóng, bao gồm việc tạo cơ sở dữ liệu, thay đổi cấu trúc bảng và tạo bảng mới mà không lo mất dữ liệu.
Cách tạo mô hình Database First
Chọn Dữ liệu từ menu bên trái, sau đó chọn “Mô hình Dữ liệu Thực thể ADO.NET”
Đặt tên cho mô hình Thực thể của bạn tại hộp văn bản “Tên”
Chọn EF Designer từ biểu tượng cơ sở dữ liệu trong bảng điều khiển.
Chọn kết nối với cơ sở dữ liệu bạn muốn tạo
Chọn Máy chủ cơ sở dữ liệu mà bạn muốn kết nối
Chọn loại cho máy chủ cơ sở dữ liệu đăng nhập tại “Use SQL Server Authentication”
Chọn cách sử dụng cơ sở dữ liệu cho ứng dụng của bạn
Kiểm tra kết nối để đảm bảo nó thành công trước khi tạo khung thực thể
Nhấp vào nút “OK” để hoàn tất kết nối đã tạo
OnlineTrade Entities làm tên của chuỗi kết nối và nhấp vào Tiếp theo.
LINQ là phương pháp thống nhất truy vấn dữ liệu trong C# và Visual Basic NET, cho phép truy xuất thông tin từ nhiều nguồn khác nhau một cách hiệu quả.
Cú pháp LINQ được tích hợp trong C# và VB.NET, giúp xóa bỏ rào cản giữa ngôn ngữ lập trình và ngôn ngữ truy vấn dữ liệu Điều này tạo ra một giao diện lập trình đồng nhất cho nhiều nguồn dữ liệu khác nhau như SQL Server, XML, Web Services và Objects.
Các truy vấn LINQ trong C# đều tác động trên nguồn dữ liệu
LINQ cho phép lập trình viên sử dụng một phương pháp viết mã thống nhất, bất kể nguồn dữ liệu khác nhau, vì nó luôn tương tác với các đối tượng.
• Mỗi loại nguồn dữ liệu trong C# cần xây dựng thư viện hỗ trợ LINQ (LINQ provider) riêng giúp chuyển đổi dữ liệu về dạng object và ngược lại
To work with XML data, it is essential to create an additional provider known as "LINQ to XML." Similarly, for SQL Server databases, a separate provider called "LINQ to SQL" must be developed.
LINQ to Object: Sử dụng LINQ đối với các đối tượng collection mà implement từ IEnumerable hoặc IEnumerable (dữ liệu được lưu trong bộ nhớ).
LINQ to Dataset: Sự kết hợp giữa LINQ và ADO.NET.
LINQ to XML: Truy vấn thông tin trong file XML.
LINQ to Entity là một công nghệ tương tự như LINQ to SQL, nhưng nó hỗ trợ nhiều loại cơ sở dữ liệu khác nhau Điều này rất hữu ích vì nhiều cơ sở dữ liệu không phù hợp để sử dụng chung với Net, giúp mở rộng khả năng truy cập dữ liệu cho các ứng dụng phát triển trên nền tảng này.
LINQ to SQL cho phép ánh xạ các bảng, view và stored procedures thành các đối tượng trong ứng dụng Công nghệ này giúp thực hiện các truy vấn trên các đối tượng đó bằng cách chuyển đổi linh hoạt giữa các đối tượng và câu lệnh SQL.
- Thực hiện thêm/sửa/xóa dữ liệu dựa trên các đối tượng trên
- Hỗ trợ transaction. Ưu điểm
Ngôn ngữ quen thuộc: Nhà phát triển không phải học ngôn ngữ truy vấn mới cho từng loại nguồn dữ liệu hoặc định dạng dữ liệu
Viết ít code: Nó làm giảm số lượng mã được viết so với cách tiếp cận truyền thống hơn
Code dễ đọc: LINQ làm cho mã dễ đọc hơn để các nhà phát triển khác có thể dễ dàng hiểu và bảo trì nó
Cách truy vấn chuẩn hóa nhiều nguồn dữ liệu: Có thể sử dụng cùng một cú pháp LINQ để truy vấn nhiều nguồn dữ liệu
An toàn khi biên dịch của các truy vấn: Nó cung cấp kiểm tra kiểu của các đối tượng tại thời gian biên dịch
Hỗ trợ IntelliSense: LINQ cung cấp IntelliSense cho các danh sách kiểu generic
Định hình dữ liệu: có thể truy xuất dữ liệu theo các hình dạng khác nhau.
Có hai cách viết cho LINQ là cú pháp truy vấn (query syntax) và cú pháp phương thức (method syntax)
XÂY DỰNG WEBSITE
PublicPage ( Các trang để hiển thị thông tin sản phẩm cho người dung lựa chọn )
Hình 5: Trang chủ (Index.aspx)
Hình 6: Trang sản phẩm (Products.aspx)
Hình 7: Trang chi tiết sản phẩm (Single.aspx)
Hình 8: Trang giỏ hàng (Check_Out.aspx)
Hình 9 : Trang bài viết (Blog.aspx)
Hình 10: Trang chi tiết bài viết (Blog_Single.aspx)
Hình 11: Trang đăng nhập tài khoản (Login.aspx)
Hình 12: Trang tạo tài khoản (Register.aspx)
Hình 13: Trang liên hệ (Contact.aspx)
Hình 14: Trang điều khoản và bảo mật (PrivacyNotice.aspx)
Hình 15: Đoạn code trong code behind (Products.aspx trong ThuVien.cs)
Hình 16: Lưu đồ của quá trình đăng nhập vào hệ thống
Nhập tài khoản và mật khẩu
Kiểm tra tài khoản, mật khẩu
Load ra trang cá nhân
PrivatePage ( Các trang chỉ dành riêng cho người có quyền truy cập vào) Sau khi đăng nhập thất bại ( Hệ thống sẽ báo đăng nhập thất bại )
Sau khi đăng nhập thành công trang cá nhân (CaNhan.aspx)
Trang tài khoản cấm dùng (TaiKhoanCamDung.aspx)
Hình 19: Tài khoản bị cấm
Hình 20: Trang đăng bài viết (TaoBaiViet.aspx)
Hình 21: Trang bài viết hoạt động (BaiVietHoatDong.aspx)
Hình 22: Trang bài viết tạm ngưng (BaiVietTamNgung.aspx)
Hình 23: Trang đăng sản phẩm(DangSanPham.aspx)
Hình 24: Trang sản phẩm kinh doanh(SanPhamKinhDoanh.aspx)
Hình 25: Trang sản phẩm tạm ngưng(SanPhamTamNgung.aspx)
Hình 26: Trang tạo đơn hàng(TaoDonHang.aspx)
//Tạo mới ADO.NET Entity Data Model
Hình 27: Tạo mới ADO.NET Entity Data Model
Hình 28: Connect với Database QLBH
//Chọn các bảng có trong Database và Finish
Hình 29: Kết nối thành công
//Điền tên kết nối và chọn database
//Chọn Advanced sau đó copy toàn bộ chuỗi kết nối
//Vào app.config và đổi chỗi kết nối tại