1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình lập trình Web

147 3 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Lập Trình Web
Tác giả Nguyễn Đình Ánh, Nguyễn Huy Cường, Mai Ngọc Thu, Trần Đăng Khoa, Phạm Hữu Kỳ
Trường học Đại Học Công Nghệ Tp.HCM
Chuyên ngành Lập Trình Web
Thể loại Giáo trình
Năm xuất bản 2023
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 147
Dung lượng 4,34 MB

Cấu trúc

  • BÀI 1 TỔNG QUAN VỀ ASP.NET (10)
    • 1.1 TỔNG QUAN ASP.NET (10)
    • 1.2 TÍNH NĂNG MỚI TRONG ASP.NET 4.5 (12)
    • 1.3 TẠO TRANG WEB VỚI VISIUAL STUDIO (21)
  • BÀI 2 CÁC LỚP SỬ DỤNG TRONG ASP.NET (29)
    • 2.1 HTTP REQUEST (29)
    • 2.2 HTTP RESPONSE (30)
    • 2.3 HTTP SERVER (31)
    • 2.4 SESSION VÀ COOKIE (32)
  • BÀI 3 TRUY CẬP DỮ LIỆU (38)
    • 3.1 TỔNG QUAN (38)
    • 3.2 TRUY CẬP DỮ LIỆU ADO.NET (40)
    • 3.3 TRUY CẬP DỮ LIỆU XML (41)
    • 3.4 SQLDATASOURCE (42)
    • 3.5 TRUY CẬP DỮ LIỆU LINQ (44)
  • BÀI 4 LẬP TRÌNH VỚI JQUERY (51)
    • 4.1 J QUERY LÀ GÌ? (51)
    • 4.2 LẬP TRÌNH VỚI J QUERY (53)
  • BÀI 5 TỔNG QUAN VỀ ASP.NET MVC (62)
    • 5.1 TỔNG QUAN ASP.NET MVC (62)
    • 5.2 XÂY DỰNG ỨNG DỤNG VỚI ASP.NET MVC (66)
    • 5.3 ĐỊNH TUYẾN URL (68)
  • BÀI 6 TỔNG QUAN VỀ ASP.NET CORE (73)
    • 6.1 TỔNG QUAN ASP.NET C ORE (73)
    • 6.2 XÂY DỰNG ỨNG DỤNG VỚI ASP.NET C ORE (82)
  • BÀI 7 TỔNG QUAN VỀ ASP.NET CORE MVC (89)
    • 7.1 TỔNG QUAN ASP.NET C ORE MVC (89)
    • 7.2 XÂY DỰNG ỨNG DỤNG VỚI ASP.NET C ORE MVC (96)
  • BÀI 8 KỸ THUẬT TRUYỀN DỮ LIỆU TRONG ASP.NET CORE MVC (102)
    • 8.1 V IEW B AG TRONG ASP.NET C ORE MVC (102)
  • Kết luận ................................................................................................... 102 (104)
    • 8.2 V IEW D ATA TRONG ASP.NET C ORE MVC (104)
  • Kết luận ................................................................................................... 104 (106)
    • 8.3 S TRONGLY T YPED V IEWS TRONG ASP.NET C ORE MVC (107)
    • 8.4 V IEW M ODEL TRONG ASP.NET C ORE MVC (110)
    • 8.5 T EMP D ATA TRONG ASP.NET C ORE MVC (112)
  • Kết luận ................................................................................................... 111 (113)
    • BÀI 9 ĐỊNH TUYẾN TRONG ASP.NET CORE MVC (116)
      • 9.1 G IỚI THIỆU Đ ỊNH T UYẾN TRONG ASP.NET C ORE MVC (116)
    • BÀI 10 QUẢN LÝ TRẠNG THÁI TRONG ASP.NET CORE MVC (123)
      • 10.1 C OOKIES IN ASP.NET C ORE MVC (123)
      • 10.2 S ESSIONS IN ASP.NET C ORE MVC (124)
    • BÀI 11 ENTITY FRAMEWORK CORE (128)
      • 11.1 G IỚI THIỆU VỀ E NTITY F RAMEWORK C ORE (128)
      • 11.2 CÁC PHƯƠNG PHÁP TIẾP CẬN TRONG ENTITY FRAMEWORK CORE (130)
      • 11.3 EF C ORE D ATABASE P ROVIDERS (132)
      • 11.4 ASP.NET C ORE MVC S Ử DỤNG EF C ORE (132)
    • BÀI 12 BẢO MẬT CHO ỨNG DỤNG ASP.NET CORE MVC (140)
      • 12.1 G IỚI T HIỆU (140)
      • 12.2 ASP.NET C ORE I DENTITY (143)
      • 12.3 K ẾT L UẬN (145)
  • TÀI LIỆU THAM KHẢO ........................................................................................... 145 (147)

Nội dung

Đọc và ghi bất đồng bộ các đối tượng HTTP Request và Response ASP.NET 4 giới thiếu khả năng đọc một thực thể HTTP request như là một stream bằng cách sử dụng phương thức HttpRequest.GetB

TỔNG QUAN VỀ ASP.NET

TỔNG QUAN ASP.NET

Trước hết, tên đầy đủ của ASP.NET là Active Server Pages NET (.NET ở đây là

.NET framework) Nói đơn giản thì ASP.NET là một công nghệ có tính cách mạng dùng để phát triển các ứng dụng về mạng hiện nay cũng như trong tương lai ASP.NET là một phương pháp tổ chức hay khung tổ chức (framework) để thiết lập các ứng dụng mạnh cho mạng dựa trên CLR (Common Language Runtime)

ASP.NET tích hợp với Framework

.NET Framework được chia thành bộ các tác vụ cho từng chức năng gồm các lớp (class), các cấu trúc (structures), các giao diện (interfaces) và các lõi (core) thành phần chương trình Trước khi sử dụng thành phần nào ta phải hiểu cơ bản về chức năng, các tổ chức của nó Mỗi một trong hàng nghàn các tầng lớp được nhóm theo trình tự logic, thứ bậc được gọi là một namespace Mỗi namespace cung cấp một tính năng

Tính đa ngôn ngữ Để xây dựng một ứng dụng web chúng ta không chỉ chọn một ngôn ngữ mà có thể chọn nhiều ngôn ngữ khác Điều quan trọng là các ngôn ngữ chúng ta chọn mã của nó dịch được ra mã IL Điều đó có nghĩa là IL là ngôn ngữ của NET và chỉ có CLR nhận biết được IL

ASP.NET là ngôn ngữ lập trình hướng đối tượng sử dụng các ngôn ngữ NET Nó cung cấp bộ các đối tượng nhỏ và thực sự là một tầng làm việt trên nguyên lý của HTTP và HTML Mã nguồn của chúng ta không được truy cập toàn bộ các đối tượng trong NET Framework nhưng có thể khai thác tất cả các quy ước của một môi trường OOP (Object Oriented Programming) Chúng ta có tạo các lớp, giao diện, kế thừa các lớp Chúng ta có thể kiểm soát được các đối tượng trong chương trình như hiển thị dữ liệu và các sự kiện của đối tượng

Một ứng dụng ASP.NET luôn luôn được biên dịch, nó không chạy bằng mã của C# hoặc Visual Basic mà không được biên dịch trước Một ứng dụng ASP.NET thực sự được biên dịch thông qua 2 giai đoạn:

- Giai đoạn đầu tiên những các mã (code) ta viết (C#, Visual

Basic hoặc ngôn ngữ NET khác) được dịch bởi

Language (MSIL) Giai đoạn dịch này được dịch tự động khi trang wed đầu tiên yêu cầu Chúng ta có thể thực hiện dịch trước Các tập tin được dịch thành mã IL

The next phase is translated before the web page is executed At this stage, the IL code is translated into native machine code This phase is known as Just-In-Time (JIT).

Hình 1.1: Kiến trúc Net Framework

Khía cạnh quan trọng nhất của công cụ ASP.NET là nó chạy trong môi trường thời gian thực (Runtime) của CLR (Common Language Runtime) CLR là máy ảo (virtual machine) trong Microsoft NET, do có ngôn ngữ trung gian IL nên khi phát triển ứng dụng trên NET, chúng ta không bị phụ thuộc vào thiết bị, có nghĩa là theo Microsoft nói thì ứng dụng NET có thể chạy trên bất kỳ thiết bị nào có NET Framework Tất cả các namespace, các ứng dụng, các lớp trong bộ NET Framework được gọi tắt là bộ quản lý mã CLR cũng cung cấp các dịch vụ quan trọng khác như:

Dễ dàng triển khai và cấu hình

Mọi phiên bản NET Framework đều cung cấp các lớp cơ bản giống nhau Khi triển khai ứng dụng ASP.NET, bạn chỉ cần sao chép các tệp ứng dụng vào thư mục ảo trên máy chủ và đảm bảo máy chủ đã cài đặt NET Framework là đủ.

Việc cấu hình dễ dàng đơn giản không phụ thuộc vào IIS (Internet Information

Services) Cấu hình trong ASP.NET được đặt trong tập tin web.config Tập tin web.config được để cùng với thư mực chứa trang web của chúng ta Tập tin web.config không bao giờ bị khóa, chúng ta có thể truy cập bất kỳ lúc nào, việc sửa tập tin này hoàn toàn dễ dạng vì chúng được lưu dưới dạng XML.

TÍNH NĂNG MỚI TRONG ASP.NET 4.5

Microsoft phát hành ASP.NET vào ngày 19 tháng 11 năm 2007 cùng với Visual Stutio

2008 Đây là bước tiến hóa từ ASP.NET 2.0 tới ASP.NET 4.5 Nếu chúng ta đang sử dụng ASP.NET 2.0 để sử dụng ASP.NET 4.5 chỉ cần cài đặt thêm các tính năng mới của ASP.NET 4.5 Trong phần này ta sẽ giới thiệu một số tính năng mới trong ASP.NET 4.5 Đọc và ghi bất đồng bộ các đối tượng HTTP Request và Response

ASP.NET 4 giới thiếu khả năng đọc một thực thể HTTP request như là một stream bằng cách sử dụng phương thức HttpRequest.GetBufferlessInputStream Phương thức này cung cấp khả năng truy xuất stream cho thực thể request, nhưng nó được thực thi đồng bộ, và như vậy nó sẽ làm nghẽn thread vì phải thực thi việc đọc stream

ASP.NET 4.5 hỗ trợ khả năng đọc stream bất đồng bộ trên thực thể HTTP request, và khả năng flush bất đồng bộ ASP.NET 4.5 cũng giúp cho bạn có khả năng tăng gấp đôi buffer cho một thực thể HTTP request, điều đó giúp cho việc tích hợp dễ dàng với các các downstream HTTP handlers như là các trang aspx và các ASP.NET MVC controllers

1.2.1.1 Các cải tiến cho việc quản lý HttpRequest

Stream được tham chiếu bởi HttpRequest.GetBufferlessInputStream trong ASP.NET 4.5 hỗ trợ các phương thức đọc đồng bộ và bất đồng bộ Đối tượng Stream được trả về từ phương thức GetBufferlessInputStream nay đã cài đặt cho cả hai phương thức BeginRead và EndRead Các phương thức bất đồng bộ của Stream giúp bạn đọc bất đồng bộ thực thể Request theo từng chunks (từng phần nhỏ), trong khi đó ASP.NET sẽ giải phóng thread hiện tại đối với mỗi vòng lặp của việc đọc bất đồng bộ

ASP.NET cũng thêm vào một phương thực mới cho việc đọc thực thể request theo cách đọc sử dụng bộ đệm là HttpRequest.GetBufferedInputStream Phương thức nạp chồng mới này cũng giống với phương thức GetBufferlessInputStream, hỗ trợ các phương thức đọc đồng bộ lẫn bất đồng bộ Tuy nhiên, khi GetBufferedInputStream đọc, nó sao chép tuyên các bytes của thực thể request vào trong bộ đệm nội vi của ASP.NET do đó các downstream modules và các handlers vẫn có thể truy xuất vào đối tượng request Ví dụ, nếu một số mã upstream đang nằm trong đường ống (pipeline) đã đọc thực thể request sử dụng phương thức GetBufferedInputStream, bạn vẫn có thể sử dụng HttpRequest.Form hoặc HttpRequest.Files Điều này giúp cho bạn có thể xử lý bất động bộ đến request (ví dụ như vừa streaming một tập tin kích thước lớn đến CSDL), nhưng mà vẫn tiếp tục chạy được các trang aspx và controllers

1.2.1.2 Ghi dữ liệu bất đồng bộ lên đối tượng response

Giao trả các phản hồi tới máy khách HTTP có thể tốn thời gian khi máy khách ở xa hoặc kết nối băng thông hẹp Thông thường, ASP.NET sẽ truyền các byte trả về sau đó gọi lệnh flush bộ đệm vào thời điểm kết thúc xử lý yêu cầu.

Nếu nội dung trả về (được buffer) là lớn (ví dụ như gởi về một tập tin lớn cho client), bạn phải lặp lại việc gọi HttpResponse.Fush để gởi về client và giữ mức sử dụng bộ nhớ nằm trong tầm kiểm soát Tuy nhiên, Flush là một lời gọi đồng bộ, nên việc gọi đi gọi lại Flush sẽ tiêu tốn nhiều thời gian

ASP.NET 4.5 đã có thêm sự hỗ trợ cho việc ghi dữ liệu bất đồng bộ bằng các phương thức BeginFlush và EndFlush của đối tượng HttpResponse Sử dụng các phương thức này sẽ giúp bạn tạo được các module bất đồng bộ và các hanlder bất động bộ mà chúng sẽ gởi dữ liệu liên tục về client mà không làm chậm các thread của hệ điều hành Giữa các lời gọi BeginFlush và EndFlush, ASP.NET giải phóng thread hiện tại Khi sđó nó sẽ giảm bớt lượng các thread cần phải chờ hỗ trợ các lượt tải về tốn nhiều thời gian

Hỗ trợ cho các các module và handler bất đồng bộ dạng await và task-based (Support for await and Task- Based Asynchronous Modules and Handlers)

Nền tảng NET 4 đã giới thiệu đến khái niệm lập trình bất đồng bộ gọi là task Các task được đại diễn bởi kiểu dữ liệu Task và các kiểu liên quan có trong namespace System.Threading.Tasks Nền tảng NET 4.5 tiếp tục cải tiến và giúp cho việc làm việc với các đối tượng Task trở nên đơn giản hơn Với NET 4.5, trình biên dịch hỗ trợ hai từ khóa mới đó là await và async Từ khóa await giúp xác định một đoạn mã lệnh phải chờ đợi bất đồng bộ đến khi một đoạn code khác thực thi xong Còn từ khóa async thì lại là chỉ dẫn rằng bạn có thể sử dụng các phương thức có từ khóa đó như là các phương thức bất đồng bộ dạng task-based

Sự kết hợp giữa các từ khóa await, async và đối tượng Task cho phép viết mã bất đồng bộ một cách dễ dàng trong NET 4.5 ASP.NET 4.5 cung cấp các API hỗ trợ viết các HTTP module và HTTP handler bất đồng bộ, tận dụng các cải tiến của trình biên dịch.

1.2.2.1 Các module HTTP bất đồng bộ

Giả sử bạn muốn thực hiện công việc bất đồng bộ với một phương thức trả về đối tượng Task Mã ví dụ sau đây định một phương thức bất đồng bộ mà nó thực hiện một lời gọi bất đồng bộ để tải về trang nhà của Microsoft Đó là tất cả những gì bạn cần viết và nền tảng NET sẽ tự động quản lý call stack trong khi chờ đợi việc download thực hiện xong, cũng như phục hồi call stack khi việc download hoàn thành

Bây giờ giả như bạn muốn sử dụng phương thức bất đồng bộ trong một ASP.NET

HTTP module ASP.NET 4.5 có một phương thức trợ giúp

(EventHandlerTaskAsyncHelper) và một kiểu dữ liệu delegate mới (TaskEventHandler) mà nhớ đó bạn có thể dễ dàng tích hợp các phương thức bất đồng bộ dạng task-based với mô thức lập trình bất động bộ được thực thi bởi ASP.NET pipeline Ví dụ dưới đây cho thấy cách thực hiện:

1.2.2.2 Các Http handler bất đồng bộ

Cách tiếp cận truyền thống để viết các handler bất đồng bộ trong ASP.NET chính là cài đặt interface IHttpAsyncHandler ASP.NET 4.5 giới thiệu kiểu bất đồng bộ

HttpTaskAsyncHandler mà bạn có thể kế thừa, và sẽ giúp việc xây dựng các handler bất đồng bộ dễ dàng hơn

Kiểu HttpTaskAsyncHandler là trừu tượng và yêu cầu bạn phải quá tải phương thức ProcessRequestAsync ASP.NET sẽ chịu trách nhiệm về việc tích hợp dấu hiệu dạng Task-based được ProcessRequestAsync với mô hình lập trình bất đồng bộ cũ được sử dụng bởi ASP.NET pipeline

Ví dụ dưới đây chỉ dẫn cho bạn cách sử dụng Task và từ khóa await như là một phần của việc cài đặt một HTTP handler bất đồng bộ

Các tính năng mới kiểm tra tính hợp lệ đối với Request

ASP.NET mặc định thực hiện việc kiểm tra tính hợp lệ đối với request, nó sẽ kiểm tra các request để tìm các thẻ hoặc script trong các trường, header, cookies… Nếu như nó phát hiện được điều gì bất hợp lệ, ASP.NET sẽ ném ngoại lệ Hành vi này là tuyến phòng ngừa đầu tiên ddooois với lối tấn công cross-site scripting attack

ASP.NET 4.5 giúp cho việc đọc các dữ liệu chưa được kiểm tra dễ dàng hơn

ASP.NET 4.5 cũng mặc định tích hợp thư viện AntiXSS

TẠO TRANG WEB VỚI VISIUAL STUDIO

- Chúng ta kích hoạt ứng dụng Visual Studio (h1.2)

Hình 1.2: Tạo mới dự án

- Nếu chọn New Project xuất hiện hộp hội thoại New Project (h1.3)

 Visual Basic → Web nếu chọn Visual Basic là ngôn ngữ viết ứng dụng

 Visual C# → Web nếu chọn C# là ngôn ngữ viết ứng dụng

- Trong Templates chọn ASP.NET Web Application,

- Trong Name đặt tên cho Project, tên do ta đặt

- Trong Location là thư mục chứa Project

 Nếu chọn New Web Site xuất hiện hộp hội thoại New Project sau

 Visual Basic → Web nếu chọn Visual Basic là ngôn ngữ viết ứng dụng

 Visual C# → Web nếu chọn C# là ngôn ngữ viết ứng dụng

- Trong Templates chọn ASP.NET Web Application

- Trong Location chọn tên và thư mực chứa Project

Hình 1.3: Chọn ứng dụng ASP.NET Web Application

Hình 1.4: Tạo dự án dạng ASP.NET Web Application

Ví dụ ta tạo một dự án có tên là BigSchool, đặt tại ổ đĩa C, chọn ngôn ngữ chọn là C# (h1.5) sau đó bấm OK Tiếp theo, chọn ứng dụng Web MVC

Tiếp theo nhấn vào Change Authentication:

Individual User Accounts: Dự án được tạo ra là loại dự án Web bao gồm cả phần security

No Authentication: Dự án được tạo ra là dự án Web không bao gồm phần security

Windows Authentication: Dự án được tạo ra là loại dự án Web bao gồm cả phần security nhưng tài khoản được quản lý trên mạng nội bộ

Work or School Accounts: Dự án được tạo ra là loại dự án Web sử dụng tài khoản từ cloud computing

Ngoài ra: bạn có thể chọn Web API để bổ sung khả năng hỗ trợ xây dựng thư viện web Để thực thi ứng dụng web này dưới dạng Debug, chúng ta chọn Deburg → Start

Kiến trúc MVC là việc chia tất cả mục của một ứng dụng ra làm ba thành phần (component) khác nhau Model, View và Controller:

Model đảm nhiệm vai trò cung cấp dữ liệu cho cơ sở dữ liệu và lưu trữ dữ liệu tại các kho chứa dữ liệu Tất cả các nghiệp vụ về mặt logic được thực thi tại Model Dữ liệu đầu vào từ người dùng qua View sẽ được kiểm tra tại Model trước khi lưu vào cơ sở dữ liệu Mô hình này chịu trách nhiệm truy xuất, xác nhận và lưu trữ dữ liệu.

- View: View hiển thị các thông tin cho người dùng của ứng dụng và được giao nhiệm vụ cho việc nhận các dữ liệu vào từ người dùng, gửi đi các yêu cầu đến bộ điều khiển, sau đó là nhận lại các phản hồi từ bộ điều khiển và hiển kết quả cho người dùng Các trang HTML, JSP, các thư viện thể và các tập tin nguồn là một phần của thành phần View

- Controller: Controller là tầng trung gian giữa Model và View Controller được giao nhiệm vụ nhận các yêu cầu từ phía máy khách Một yêu cầu được nhận từ máy khách được thực hiện bởi một chức năng logic thích hợp từ thành phần Model và sau đó sinh ra các kết quả cho người dùng và được thành phần View hiển thị ActionServlet, Action, ActionForm và struts-config.xml là các phần của Controller

- Làm quen với môi trường Microsoft Visual Studio

- Xây dựng ứng dụng web đơn giản WebCalculator

 Viết mã lệnh xử lý đơn giản

 Chạy, Debug và sửa lỗi chương trình

Câu 2: Môi trường Microsoft Visual Studio 2010 hoặc mới hơn

- Một số khái niệm cơ sở

 Thủ tục – Hàm (Private, Protected, Public)

 Lưu mã nguồn trong tập tin riêng biệt (Yes? No?)

 Toolbox o Thêm control/tab vào toolbox (Bấm phải \ Add …) o Kéo thả control vào Form

 Xem màn hình design form: Shift-F7

 Chuyển đổi từ Design sang Code và ngược lại: F7

 Chạy chương trình: Ctrl-F5 (hoặc F5 với chế độ Debug)

CÁC LỚP SỬ DỤNG TRONG ASP.NET

HTTP REQUEST

Request là một thể hiện của lớp HttpRequest Trình duyệt dùng đối tượng Request để gửi thông tin cần thiết tới Server

Hình 2.1: Người dùng gởi yêu cầu đến server Đối tượng Request nhận tất cả giá trị mà trình duyệt của client gởi đến server thông qua HTTP Request

Request đại diện cho Client khi yêu cầu trang Web, Server sẽ dùng vừa Response vừa Request để đáp ứng yêu cầu hay đòi hỏi thông tin từ Client

RequestType: trả về phương thức truyền dữ liệu từ client đến server gồm 2 phương thức POST và GET

Cú pháp: var valMethode=Request.RequestType;

2.1.2.2 Tập hợp Form - Form collection

Form collection được sử dụng để tập hợp dữ liệu được chứa trong các phần tử của form chuyển từ client đến server bằng phương thức POST.

HTTP RESPONSE

Http Response được dùng để truyền dữ liệu máy chủ web đến trình duyệt web

Các thuộc tính/phương thức

- Thuộc tính Buffer: có 2 giá trị true và false quy định cách truyền tải dữ liệu:

Cú pháp: Response.Buffer=true/false;

 true: Hoàn tất công việc và gửi một lần

 false: Thực hiện xong đến đâu thì gửi đến đó

- isClientConnected: Kiểm tra máy client có yêu cầu kết nối đến server, kết quả trả về giá trị true/false

- Cookies: được sử dụng để ghi Cookies Cookies được thể hiện trong ASP.NET là lớp

- End(): Kết thúc tiến trình xử lý trên Server và đẩy dữ liệu tới Client

- Flush(): Kết thúc tiến trình, quay lại thực hiện tiếp

- Redirect(url) : dùng để chuyển client sang một URL khác

- Redirect(url, Boolean): dùng để chuyển client sang một URL khác, trong đó:

 Nếu Boolean=true thì khi thực hiện xong, lệnh Response sẽ thực hiện tiếp

 Nếu Boolean =false thì khi thực hiện xong, lệnh Response sẽ dừng

- Write(“Data”): Ghi dữ liệu ra trang web

Ví dụ: Response.Write(“Hello world”);

HTTP SERVER

- Đối tượng Server cung cấp các phương thức giúp chuyển điều khiển giữa các trang với nhau, lấy thông tin về mã lỗi, encode, …

 ScriptTimeout: thiết lập thời gian xử lý tối đa 1 tập tin

Ví dụ: Server.ScriptTimeout0s //thiết lập thgian mặc định

- HtmlEncode(str): dùng để mã hoá HTML thành chuỗi

Cú pháp: Khi mã hoá chuỗi HTML sang chuỗi bình thường nếu gặp các ký tự như sau sẽ chuyển sang ký tự tương ứng:

 Ký tự < chuyển thành <

 Ký tự > chuyển thành >

 Ký tự & chuyển thành &

 Dấu nháy đôi “ chuyển thành "

- HtmlDecode(strcontent):giải mã các thẻ HTML

Ví dụ: Str=“n>5”; Str=server.HtmlDecode(str); // kết quả n>5

- Transfer: gửi tất cả thông tin mà nó đã xử lý từ trang ASP hiện hành sang trang

Cú pháp: Tham số path là đường dẫn của tập tin ASP cần chuyển điều khiển

- Phương thức URLEncode: Tương tự như phương thức HTMLEncode, phương thức

URLEcode dùng để mã hoá URL thành chuỗi

Cú pháp: Khi mã hoá chuỗi URL sang chuỗi bình thường nếu gặp các ký tự như sau, sẽ chuyển sang ký tự tương ứng:

 Ký tự khoảng trắng chuyển thành dấu +

 Ký tự không thuộc ký tự chữ và số sẽ chuyển thành số hexadecimal.

SESSION VÀ COOKIE

Giới thiệu Cookie và Session Điểm chung giữa Cookie và Session là việc lưu trữ và quản lý một số thông tin liên quan đến người dùng website, những thông tin này cần dùng trên nhiều trang web của cùng hệ thống website

Thông tin được lưu trữ với khoảng thời gian quy định trước, và có thể tự hủy khi hết thời gian cho phép Cookie và Session thuận tiện cho việc gửi thông tin qua lại giữa các trang web mà không cần dùng qua phương thức POST/GET… giảm thiểu việc phát sinh thêm biến Ứng dụng thường thấy của Cookie và Session là lưu trữ thông tin đăng nhập của người dùng, xác định thời điểm đăng nhập, thoát khỏi website … Kết hợp với thao tác

Redirect để có thể quản lý, chặn truy cập từ người dùng khi chưa đăng nhâp…

Cookie là các tệp văn bản nhỏ được lưu trữ trên trình duyệt khi người dùng truy cập vào một trang web Các máy chủ gửi cookie về trình duyệt và lưu trữ chúng trên máy của người dùng (máy khách) Khi người dùng truy cập lại vào cùng trang web, trình duyệt sẽ gửi cookie trở lại máy chủ, giúp máy chủ xác định người dùng và tùy chỉnh trải nghiệm của người dùng.

Cookie khác nhau tùy theo trình duyệt, địa chỉ IP người dùng và máy chủ của trang web Cookie được tạo ra bởi trang web và gửi đến trình duyệt, do đó, hai trang web khác nhau (kể cả khi cùng lưu trữ trên một máy chủ) sẽ có hai cookie khác nhau được gửi đến trình duyệt.

Mỗi trình duyệt sẽ có cách quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 trình duyệt cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau

Trong ASP.NET các phương thức, thuộc tính liên quan đến việc xử lý Cookie được lưu trữ trong class HttpCookie Các thuộc tính thường dùng trong Cookie:

- Domain: Tên miền của Cookie lưu trữ

- Expires: Xác định thời gian hiệu lực của Cookie

- Value: Giá trị của Cookie

- HasKeys: Cho biết Cookie có tập giá trị con hay không

- Values: Tập các giá trị của Cookie

Mỗi lần có yêu cầu lên website, trình duyệt sẽ gửi cookie lên server, server sẽ có cơ chế “đọc” cookie và xử lý cho tác vụ nào đó Mỗi cookie được website gửi đến trình duyệt thường bao gồm 3 thành phần chính sau:

- Địa chỉ URL của website mà trình duyệt nhận cookie

- Thời gian tồn tại của Cookie

Cú pháp: Respone.Cookies[cookie][key|attribute]=value;

Trong đó, cookie là tên biến cookie, key là tham số mở rộng cho Cookie, attribute là các thuộc tính của biến Cookie

Cú pháp: value = Request.Cookies[cookie][key|attribute];

Thao tác trên Cookie có nhiều Subkey

- Xóa Cookie: Việc xóa Cookie thực chất là thao tác chỉnh thời gian hiệu lực về trước thời điểm hiện tại so với giờ hệ thống

Ta có thể chưa thực sự dùng cookie để lưu trữ Shoping Cart Một cookie vừa quá nhỏ và quá đơn giản Để làm việc ngoài giới hạn của Cookie, ASP.NET Framework hỗ trợ một chức năng mới được gọi là Session State Giống với Cookie, Session lưu trữ dữ liệu trong phạm vi riêng với từng người sử dụng Nhưng không giống với Cookie,

Session không giới hạn dung lượng, nếu ta cần lưu trữ hàng Gigabyte dữ liệu, hơn thế nữa Session có thể đưa ra điều đối tượng phức tạp hơn là chuỗi Text Ta có thể lưu trữ một vài đối tượng trong Session Ví dụ ta có thể lưu trữ một Dataset hay một Shoping Cart trong Session

Trong ASP.NET cũng như các công nghệ lập trình web khác, Session được tạo ra khi Client bắt đầu có yêu cầu gửi tới Server và sẽ kết thúc khi Client có thao tác hủy Session hoặc sau một thời gian (định trước) không có bất kỳ thao tác nào lên Server

Khi Session được tạo đồng thời phương thức Session_OnStart() sẽ được thực thi và tương tự khi kết thúc Session phương thức Session_OnEnd() sẽ được thực thi

2.4.3.3 Một số phương thức thao tác trên session

- Timeout : Qui định khoảng thời gian (tính bằng phút) Web Server duy trì Session nếu người dùng không gởi yêu cầu nào về lại Server

 Giá trị mặc định của Timeout là 20 Nếu không có yêu cầu nào kể từ lần yêu cầu cuối cùng sau một khoảng thời gian là phút, đối tượng Session mà Web server cấp cho lần làm việc đó sẽ tự động được giải phóng

 Những yêu cầu sau đó, webserver coi như là một người dùng mới, và sẽ cấp một đối tượng Session mới

Ví dụ: Thiết lập thời gian cho 1 phiên làm việc của user là 100 phút

Có thể thiết lập thuộc tính này trong tập tin Web.config

- SessionID: chứa ID của session đang kích hoạt, mỗi user được phân biệt bởi sessionID gọi là mã phiên làm việc

- Count: trả về số session trong một ứng dụng

- Abandon(): giải phóng vùng nhớ được dùng để duy trì đối tượng Session trên Web

Server ngay khi được gọi thực hiện Những yêu cầu sau đó được Web server coi như là một người dùng mới

- Remove(“SessionName”): xoá dữ liệu trên biến “VarSession”

- RemoveAll(): Xoá dữ liệu, nhưng sessionID vẫn tồn tại

- Cũng có thể dùng Session để lưu các biến giá trị như Cookie

Bài học này giới thiệu về các đối tượng làm việc thông dụng và quan trọng trong kỹ thuật lập trình web là Request, Response, Cookie và Session

Request là một thể hiện của lớp HttpRequest, Browser dùng Request object để gửi thông tin cần thiết tới Server Đối tượng Request nhận tất cả giá trị mà trình duyệt của client gởi đến server thông qua HTTP request

Phản hồi HTTP được sử dụng để truyền dữ liệu từ máy chủ web đến trình duyệt web Đối tượng Máy chủ cung cấp các phương thức để điều hướng giữa các trang, trích xuất thông tin về mã lỗi và mã hóa.

Cookie được lưu trữ trên trình duyệt, khi người dùng sử dụng trình duyệt truy cập vào một website nào đó thì server sẽ gửi cookie về trình duyệt và lưu trữ trực tiếp trên máy người dùng (client) Cookie sẽ khác nhau cho mỗi loại trình duyệt, IP người dùng cũng như server của website Cookie được tạo ra bởi website và gởi tới browser, do vậy

2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới trình duyệt Mỗi trình duyệt sẽ có cách quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 trình duyệt cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau

Tương tự như Cookie, Session lưu trữ dữ liệu riêng cho từng người dùng Tuy nhiên, không giống như Cookie, Session không giới hạn dung lượng, cho phép lưu trữ dữ liệu lên đến hàng gigabyte Hơn nữa, Session có thể lưu trữ các đối tượng phức tạp hơn chuỗi văn bản, cho phép lưu trữ nhiều đối tượng khác nhau Session được tạo khi máy khách gửi yêu cầu đầu tiên tới máy chủ và kết thúc khi máy khách hủy session hoặc sau một khoảng thời gian không hoạt động nhất định.

TRUY CẬP DỮ LIỆU

TỔNG QUAN

Phần lớn các ứng dụng hiện nay đều sử dụng cơ sở dữ liệu Có nhiều cách thức truy cập dữ liệu khác nhau trong các công nghệ của Microsoft như ADO, RDO, DAO, ODBC Tuy nhiên từ khi NET Framework ra đời thì công nghệ ADO.NET đã được tích hợp,

ADO.NET chứa các lớp cho phép các ứng dụng kết nối với các nguồn dữ liệu (connect data sources), thực hiện các lệnh (execute commands), quản lý dữ liệu đã ngắt kết nối

(manage disconnected data) Với ADO.NET, người lập trình có thể viết ít mã lệnh thao tác cơ sở dữ liệu hơn so với các công nghệ trước trong các ứng dụng client-server hoặc các ứng dụng trên desktop

Mặt khác, trong ASP.NET từ phiên bản NET Framework 2.0 trở lên có thêm các thao tác với cơ sở dữ liệu mà không sử dụng ADO.NET như SqlDataSource, LINQ hoặc Profiles

Ngoài ra các ứng dụng truy cập dữ liệu của NET Framework còn có thể truy nhập vào các nguồn dữ liệu ngoài như tập tin, Stream, XML, Ajax, web services, WCF, data services

In this lesson, we will create a Web site project that works with the database, using Visual Studio 2008 to create a Website project, in which we create a database named DB_TEST.MDF in the App_Data folder (h3.1, h3.2), then Use the database DB_TEST to create 2 tables HangHoa and KhoHang.

Hình 3.1: Thêm Sql cơ sở dữ liệu từ dự án

Tiếp theo, ta tạo một chuỗi kết nối trong tập tin cấu hình web.config có tên là ConnectionString giúp truy cập vào cơ sở dữ liệu.

Nội dung tập tin web.config:

For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId9433

TRUY CẬP DỮ LIỆU ADO.NET

ADO.NET Data Providers cho phép truy nhập vào một cơ sở dữ liệu cụ thể, thực hiện các câu lệnh SQL và nhận dữ liệu Data provider là chiếc cầu nối giữa ứng dụng và nguồn dữ liệu

Lớp ADO.NET Data Provider bao gồm các thành phần:

- Connection: Thực hiện kết nối tới nguồn cơ sở dữ liệu;

- Command: Thực hiện một câu lệnh SQL hoặc một store procedures; DataReader:

Chỉ đọc và nhận dữ liệu từ một truy vấn;

- DataAdapter thực hiện 2 nhiệm vụ:

 Điền dữ liệu nhận được vào một DataSet,

 Có thể ghi nhận sự thay đổi dữ liệu trong DataSet

Một ví dụ sử dụng ADO.NET với đối tượng hiển thị dữ liệu là GridView Tạo một webform đặt tên là Adonet.aspx, trong webform đó tạo một GridView đặt tên là GridView1 Mã lệnh thực hiện kết nối dữ liệu:

SqlConnection(ConfigurationManager.ConnectionStrings[“ConnectionString”].ConnectionS tring);

SqlCommand sql = new SqlCommand(“SELECT * FROM HangHoa”, conn);

SqlDataAdapter sda = new SqlDataAdapter(sql); sda.Fill(ds, “HangHoa”);

DataTable dt = ds.Tables[“HangHoa”];

Kết quả chương trình là:

Hình 3.3: Hiển thị danh sách hang hóa trên trang với GridView

TRUY CẬP DỮ LIỆU XML

Dữ liệu XML ngày càng thông dụng và được phát triển mạnh mẽ hơn trước Trong các ứng dụng ngày nay, việc sử dụng XML thay cho dữ liệu truyền thống đang có xu hướng phát triển mạnh mẽ Tuy nhiên các ứng dụng sử dụng XML làm cơ sở dữ liệu vẫn còn ở mức quy mô nhỏ và hạn chế

Ví dụ sử dụng GridView để hiển thị dữ liệu trong một tập tin XML

Nội dung tập tin Employee.xml:

Nội dung tập tin XML.aspx.cs:

DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath(“Employee.xml”));

DataTable dt = ds.Tables[“Employees”];

Kết quả chương trình là:

Hình 3.4: Kết quả chương trình

SQLDATASOURCE

SqlDataSource là một thành phần được giới thiệu từ NET Framework 2.0 Sử dụng

SqlDataSource để truy cập dữ liệu sẽ không cần phải viết mã lệnh lập trình, chỉ cần khai báo đầy đủ các thuộc tính cần SqlDataSource chỉ nên dùng khi không cần sử dụng các truy vấn SQL quá phức tạp để thao tác với cơ sở dữ liệu

SqlDataSource là một cách thức kết nối dữ liệu dùng ADO.NET provider:

SqlDataSource cần có một một chuỗi mô tả kết nối (connectionString) thường đặt trong web.config Tiếp theo của SqlDataSource là một câu lệnh SQL có thể là một câu lệnh truy vấn SELECT hoặc các câu lệnh liên quan đến thay đổi dữ liệu như: DELETE, INSERT, UPDATE

Hình 3.5: Kết hợp dữ liệu với SqlDataSource

Lựa chọn bảng cần hiển thị dữ liệu vào trong SqlDataSource (ví dụ table KhoHang) sau đó thiết lập GridView trỏ vào SqlDataSource vừa được tạo

Hình 3.6: Cấu hình kết nối

Kết quả chương trình là:

Hình 3.7: Trang hiển thị danh sách kho hàng trên trình duyệt

TRUY CẬP DỮ LIỆU LINQ

LINQ là một sự sáng tạo mới trong NET Framework 3.5 (Language Integrate Query) là một tập hợp mở rộng ngôn ngữ cho phép thực hiện các truy vấn trong ngôn ngữ C#

LINQ (Ngôn ngữ truy vấn tích hợp) là một tính năng mở rộng ngôn ngữ của NET Framework 3.5 và Visual Basic 2008 LINQ cho phép lựa chọn, lọc, sắp xếp, nhóm và chuyển đổi dữ liệu từ các nguồn khác nhau một cách thống nhất LINQ to Objects truy vấn các đối tượng, LINQ to DataSet truy vấn DataSet, LINQ to SQL truy vấn cơ sở dữ liệu SQL Server mà không cần viết mã, LINQ to XML đọc dữ liệu từ định dạng XML.

Nếu không dùng LINQ, nếu cần lấy tất cả hàng hóa bắt đầu bằng B thì ta có mã nguồn sau:

List dshh = dm.LayDanhMucHangHoa();

List dmhh = new List(); foreach (HangHoaChiTiet hh in dshh)

{ if (hh.HangHoa_TenHang.ToString().StartsWith(“B”))

//Nếu sử dụng LINQ trong mã lập trình:

List dshh = dm.LayDanhMucHangHoa();

IEnumerable dmhh; dmhh = from hh in dshh where hh.HangHoa_TenHang.ToString().StartsWith(“B”) select hh;

Cách làm việc của LINQ Để dùng LINQ, ta cần tạo ra một LINQ expression theo đúng quy tắc

Giá trị trả về của LINQ expression là một đối tượng iterator thực thi giao diện IEnumerable

Khi enumerable đã được gán vào iterator thì LINQ thực hiện

Cú pháp LINQ tương tự như một cú pháp của SQL nhưng có trật tự khác với SQL

3.5.3.1 Dùng filter và sorting với LINQ

IEnumerable dmhh = from hh in dshh where hh.HangHoa_TenHang.ToString().StartsWith(“B”) select hh; hoặc:

IEnumerable dmhh = from hh in dshh orderby hh.HangHoa_TenHang select hh;

Ta có thể dùng LINQ như sau (hai câu lệnh sau tương đương nhau):

IEnumerable dmhh = from hh in dshh select hh; Hoặc:

IEnumerable dmhh = hh.Select(hh => hh);

LinqDataSource là một điều khiển có thể thực hiện nhiều tác vụ thêm, sửa, xóa dữ liệu một cách tự động Với LinqDataSource, ta không cần viết mã nguồn cho cả việc cập nhật, sửa đổi dữ liệu cũng giống như SqlDataSource

Hình 3.8: Thêm Linq to SQL vào dự án

Sau đó ta tạo ra mô hình LinqSqlDataContext cho phép Linq lấy dữ liệu từ cơ sở dữ liệu DB_TEST.MDF

Ta thiết lập cấu hình cho control Linqdatasource1 như sau: Chọn Linqdatasource1

 Configure Data Source …  Chọn LinqSqlDataContext, rồi thực hiện đưa dữ liệu từ LinqDataSource vào vào GridView:

Hình 3.10: Kết quả thực thi

Kết quả chương trình là:

Hình 3.11: Danh sách hàng hóa

The ADO.NET Data Provider class consists of several components: Connection, which establishes a connection to the database source; Command, which executes an SQL statement or stored procedure; DataReader, which reads and retrieves data from a query; and DataAdapter, which performs the dual function of populating a DataSet with retrieved data, and enabling changes made to data in the DataSet to be persisted back to the data source.

LINQ cho phép xử lý dữ liệu từ các nguồn khác nhau theo một cách chung LINQ to Objects thực hiện truy vấn các đối tượng, LINQ to DataSet thực hiện truy vấn DataSet, LINQ to SQL thực hiện truy vấn đến cơ sở dữ liệu SQL Server mà không phải viết mã nguồn, LINQ to XML đọc dữ liệu từ định dạng XML

Từ khi có các control SqlDataSource, LinqDataSource thì có cần thiết dùng các đối tượng của ADO.NET (Connection, Command, Adapter, ) để truy cập dữ liệu nữa không? Câu trả lời là vẫn cần thiết vì dù các đối tượng SqlDataSource, LinqDataSource rất linh hoạt và có thể đảm đương hầu hết các chức năng nhưng vẫn chưa thể cung cấp đủ cho nhu cầu người dùng nhất là đối với những thao tác phức tạp lên cơ sở dữ liệu

và **Adapter**.

Trong bài thực hành này, ta sẽ xây dựng trang website quản lý tin:

- Cho phép chọn một lĩnh vực từ combo box và hiển thị danh sách tin thuộc lĩnh vực được chọn

- Cho phép sắp xếp danh sách tin theo ngày đăng tin, tiêu đề

- Thao tác với DataGrid: hiển thị dữ liệu, phân trang, sắp xếp,…

- Cho phép thêm, xoá, sửa tin

- Đã nắm bắt được cách thức kết nối CSDL

- Xây dựng được kiến trúc 3 tầng

- Tạo các class : LinhVucInfo, BanTinInfo, BanTinController , LinhVucController, LinhVucDAL, BanTinDAL, DataService.

LẬP TRÌNH VỚI JQUERY

J QUERY LÀ GÌ?

Giới thiệu jQuery là một thư viện kiểu mới của Javascript giúp đơn giản hóa cách viết

JavaScript và tăng tốc độ xử lý các sự kiện trên trang web Các thư viện jQuery cung cấp một mục đích chung là sự trừu tượng hoá các lớp phổ biến cho các trang web scripting, do đó nó hữu ích trong hầu hết các tình huống scripting

Các chức năng jQuery bao gồm:

- Chọn một tag hoặc một tập hợp các tag trên trang web

- Cung cấp các hàm tiện ích thông dụng

- Nhanh chóng tạo ra các tag mới

- Quan trọng nhất là phân tách việc thiết kế và lập trình web trên phía client jQuery là một thư viện script, do đó ta có thể thêm vào trang web Ta có thể download bản mới nhất của jQuery từ http://docs.iquery.com/Downloading jQuery

Từ Visual Studio 2008 SP1 đã hỗ trợ đầy đủ các chức năng của JavaScript Intellisense Mục đích chính của “jquery-***-vsdoc.js” là giúp đỡ chúng ta trong việc viết các dòng chú thích và hỗ trợ cho việc phát sinh mã thông minh trong khi soạn thảo jQuery

Sử dụng jQuery trong ASP.NET

Từ Visual Studio 2010 trở đi, jQuery đã được tích hợp sẵn trong các dự án web, như web form hay MVC

Hình 4.2: Cây thư mục của dự án

Trước khi viết các câu lệnh jQuery, ta chỉ cần khai báo sử dụng thư viện jQuery như sau:

child : lấy các phần tử con trực tiếp của phần tử cha cho trước Tương ứng với các phần tử con dưới danh nghĩa “child” của phần tử được xác định với danh nghĩa “parent”

Ví dụ gán css cho tất cả phần tử con của đối tượng cha có id là main:

$(“#main > *”).css(“border”, “3px double red”);

 Lấy phần tử liền sau của những đối tượng được chọn theo cú pháp: prev + next

Ví dụ lấy phần tử liên sau là input của những label:

$( “label + input”).css(“color”, “blue”).val(“Labeled!”);

$(“form input”).css(“border”, “1px solid blue”);

$(“#submit > *”).css(“border”, “1px solid red”);

$(“label + input”).css(“background-color”, “red”);

body { font-size: 14px;

} form { border: 2px green solid; padding: 2px; margin: 0; background: #efe;

} fieldset { margin: 1px; padding: 3px;

Nhập thông tin cá nhân

Họ và tên:

Nơi công tác

Tên công ty:

Hình 4.3: Kết quả khi thực hiện chương trình

- first : Tương ứng với phần tử đầu tiên được chọn

$(“tr:first”).css(“font-style”, “italic”);

- last : tương ứng với phần tử cuối cùng được chọn

$(“tr:last”).css(“background-color”, “yellow”);

- :not(selector) : Bỏ ra tất cả các phần tử tương ứng cho selector

$(“input:not(:checked)+span”).css(“background-color”, “yellow”);

- :even : Tương ứng với các phần tử chẵn, chỉ số 0, 2, 4,

$(“tr:even”).css(“background-color”, “#bbbbff”);

- :odd : Tương ứng với các phần tử lẻ, chỉ số 1, 3, 5, Ví dụ:

$(“tr:odd”).css(“background-color”, “#bbbbff”);

- :eq(index) :Tương ứng với một phần tử riêng lẻ bởi chỉ số của nó

Ví dụ gán css cho các cột lẻ của bảng:

Ví dụ: $(“td:eq(2)”).css(“color”, “red”);

$(“tr:first”).css(“font-style”, “italic”);

$(“tr:last”).css({ backgroundColor: 'yellow', fontWeight: 'bolder' }); $(“tr:even”).css(“color”, “red”);

$(“tr:odd”).css(“color”, “blue”);

$(“tr:eq(4)”).css(“text-decoration”, “line-through”);

$(“tr:gt(6)”).css(“font-size”, “30px”);

$(“tr:lt(3)”).css(“font-size”, “25px”);

$(“:header”).css({ background: '#000', color: “blue” });

Dòng thứ 1

Dòng thứ 2

Dòng thứ 3

Dòng thứ 4

Dòng thứ 5

Dòng thứ 6

Dòng thứ 7

Dòng thứ 8

Dòng thứ 9

Phương thức này chỉ có ở các element có thuộc tính inner html như div, span, v.v

- Lấy nội dung html (innerHTML) của phần tử html() Kiểu trả về: String

Ví dụ: Mỗi khi bấm vào thẻ p lấy nội dung html của thẻ p đó và thông báo nội dung lấy được

$(“p”).click(function() {alert($(this).html())});

- Thiết lập nội dung html (innerHTML) cho phần tử html( value ) Kiểu trả về: jQuery

Ví dụ: Thiết lập nội dung html cho thẻ div

$(“div”).html(“Chào các bạn! Chúc buổi học hôm nay thú vị.“);

- Lấy nội dung text (innerText) của phần tử text() Kiểu trả về: String

Ví dụ: Mỗi khi bấm vào thẻ p lấy nội dung text của thẻ p đó và thông báo nội dung lấy được

$(“p”).click(function() {alert($(this).html())});

- Thiết lập nội dung text (innerText) cho phần tử text( value ) Kiểu trả về: jQuery

Ví dụ: Thiết lập nội dung text cho thẻ div

$(“div”).text(“Chào các bạn! Chúc buổi học hôm nay thú vị”);

- Phương thức này chỉ có ở các phần tử có thuộc tính value như input, select val() Kiểu trả về: String

Ví dụ: var $(“#username”).val() ;

- Thiết lập giá trị cho phần tử val( value )

Ví dụ: Thiết lập nội dung text cho thẻ input

Ví dụ: $(“input”).val(“hello world”);

- :hidden Tương ứng với tất cả các phần tử được ẩn đi hoặc phần tử vào có dạng ẩn

Ví dụ: $(“div:hidden”).show(3000);

- :visible : tương ứng với các phần tử nhìn thấy được

Ví dụ: Bấm chuột vào các thẻ div nhìn thấy được

Ví dụ: $(“div:visible”).click(function() {$(this).css(“background”, “yellow”);});

Thư viện jQuery giúp đơn giản hóa việc viết JavaScript và tăng tốc độ xử lý sự kiện trên trang web Nó cung cấp các lớp trừu tượng phổ biến cho các trang web theo kịch bản, làm cho nó hữu ích trong hầu hết các tình huống xây dựng kịch bản.

Các chức năng jQuery bao gồm:

- Chọn một tag hoặc một tập hợp các tag trên trang web

- Cung cấp các hàm tiện ích thông dụng

- Nhanh chóng tạo ra các tag mới

- Quan trọng nhất là phân tách việc thiết kế và lập trình web trên phía client

- Cách sử dụng jQuery trong lập trình ASP.NET để truy xuất dữ liệu

- Một số ví dụ tổng quát và đầy đủ với các ứng dụng từ những hàm API

TỔNG QUAN VỀ ASP.NET MVC

TỔNG QUAN ASP.NET MVC

Mô hình MVC cơ bản

MVC viết tắt của M odels, V iews, C ontrollers MVC chia giao diện UI thành 3 phần tương ứng: đầu vào của controller là các điều khiển thông qua HTTP request, model chứa các miền logic, view là những thứ được sinh ra trả về cho trình duyệt

Hình 5.1: Mô hình MVC cơ bản

Lợi ích của việc dùng phương pháp MVC là sự phân đoạn rõ ràng giữa models, views, controllers bên trong ứng dụng Cấu trúc rõ ràng của mô hình MVC sẽ giúp cho việc kiểm tra lỗi ứng dụng trở nên dễ dàng hơn Đặc tính trong ASP.NET MVC

- Tách rõ ràng các mối liên quan, mở khả năng test TDD (Test Driven Developer) Ta có thể kiểm thử đơn vị (test unit) trong ứng dụng mà không cần phải chạy Controllers cùng với tiến trình của ASP.NET và có thể dùng bất kỳ một unit testing framework nào như NUnit, MBUnit, MS Test, v.v

- Có khả năng mở rộng, mọi thứ trong MVC được thiết kế cho phép dễ dàng thay thế/tùy biến Ví dụ: ta có thể lựa chọn sử dụng engine view riêng, routing policy, parameter serialization, v.v

- Bao gồm một ánh xạ URL mạnh mẽ cho phép xây dựng ứng dụng với những URL sạch, các URL không cần cs phần mở rộng Ví dụ ta có thể ánh xạ địa chỉ /Products/Edit/4 để thực hiện hành động “Edit” của lớp điều khiển ProductControllers hoặc ánh xạ địa chỉ /Blog/SomeTopic để thực hiện hành động “Display Topic” của lớp điều khiển BlogEngineController

- ASP.NET MVC Framework cũng hỗ trợ những tập tin ASP.NET như ASPX ASCX và Master, đánh dấu các tập tin này như một “view template” Ta có thể dễ dàng dùng các tính năng của ASP.NET như lồng các trang Master, snippets, mô tả server controls, template, data-binding, localization, v.v Tuy nhiên chúng sẽ không còn postback và interactive back server và thay vào đó là interactive end- user tới một Controller class ( không còn viewstate, page lifecycle )

- ASP.NET MVC Framework hỗ trợ đầy đủ các tính năng bảo mật của ASP.NET như forms/windows authenticate, URL authorization, membership/roles, output và data caching, session/profile state, configuration system, provider architecture v.v

Khác biệt với Web Form

ASP.NET WebForm sử dụng ViewState để quản lý, các trang ASP.NET đều có lifecycle, postback và dùng các web controls, các sự kiện để thực hiện các hành động cho UI khi có sự tương tác với người dùng nên hầu hết ASP.NET WebForm xử lý chậm

ASP.NET MVC được xây dựng dựa trên mô hình MVC bao gồm 3 lớp: Model, View, Controller Người dùng tương tác với ứng dụng thông qua giao diện View, mọi tương tác này sẽ được xử lý trong Controller dưới dạng action mà không còn chu kỳ sự kiện hoặc postback như ASP.NET Web Forms.

Việc kiểm thử (test), gỡ lỗi (debug) với ASP.NET đều phải chạy tất cả các tiến trình của ASP.NET và mọi sự thay đổi ID của bất kỳ điều khiển nào cũng ảnh hưởng đến ứng dụng Đối với ASP.NET MVC Framework thì việc có thể sử dụng các unit test có thể thẩm định rất dễ dàng các Controller thực hiện như thế nào

Bảng 5.1: Bảng so sánh tính năng giữa ASP.NET với ASP.NET MVC

Tính năng ASP.NET ASP.NET MVC

Kiến trúc mô hình WebForm Business Database

Kiến trúc sử dụng việc phân chia chương trình thành Controllers, Models, Views

Sử dụng cú pháp của webform, tất các sự kiện và điều khiển do server quản lý

Các sự kiện được điều khiển bởi controllers, các điều khiển không do server do server quản lý

Sử dụng hầu hết các công nghệ truy cập dữ liệu trong ứng dụng

Phần lớn dùng LINQ to SQL class để tạo mô hình truy cập đối tượng

Debug Debug chương trình phải thực hiện tất cả bao gồm các lớp truy cập dữ liệu, sự hiển thị, điều khiển các điều khiển

Debug có thể sử dụng các unit test kiểm tra các phương thức trong controller

Tốc độ phân tải chậm khi trong trang có quá nhiều các điều khiển vì ViewState quá lớn

Phân tải nhanh hơn do không phải quản lý ViewState để quản lý các control trong trang

Tương tác với javascript khó khăn vì các điều khiển được điều khiển bởi server

Tương tác với javascript dễ dàng vì các đối tượng không do server quản lý điều khiển không khó

Cấu trúc địa chỉ URL có dạng

.aspx?&

Cấu trúc địa chỉ rành mạch theo dạng Controllers/Action/Id

Lợi ích của ứng dụng web dựa trên mô hình MVC

ASP.NET MVC Framework mang lại những lợi ích sau:

- Dễ dàng quản lý sự phức tạp của ứng dụng bằng cách chia ứng dụng thành ba thành phần model, view, controller

- Nó không sử dụng view state hoặc server-based form Điều này tốt cho những lập trình viên muốn quản lý hết các khía cạnh của một ứng dụng

- Nó sử dụng mẫu Front Controller, mẫu này giúp quản lý các yêu cầu (requests) chỉ thông qua Controller Nhờ đó ta có thể thiết kế một hạ tầng quản lý định tuyến Để có nhiều thông tin hơn, ta nên xem phần Front Controller trên web site MSDN

- Hỗ trợ tốt hơn cho mô hình phát triển ứng dụng hướng kiểm thử (TDD)

- Nó hỗ trợ tốt cho các ứng dụng được xây dựng bởi những đội có nhiều lập trình viên và thiết kế mà vẫn quản lý được tính năng của ứng dụng

Các tính năng của ASP.NET MVC Framework:

- Tách bạch các tác vụ của ứng dụng (logic nhập liệu, business logic, và logic giao diện), dễ dàng kiểm thử và mặc định áp dụng hướng phát triển TDD Tất cả các tính năng chính của mô hình MVC được cài đặt dựa trên interface và được kiểm thử bằng cách sử dụng các đối tượng mocks (mock object) là các đối tượng mô phỏng các tính năng của những đối tượng thực sự trong ứng dụng Ta có thể kiểm thử unit-test cho ứng dụng mà không cần chạy controller trong tiến trình ASP.NET, và điều đó giúp unit test được áp dụng nhanh chóng và tiện dụng Ta có thể sử dụng bất kỳ nền tảng unit-testing nào tương thích với nền tảng NET

- MVC là một nền tảng khả mở rộng (extensible) & khả nhúng (pluggable) Các thành phần của ASP.NET MVC được thiết kể để chúng có thể được thay thế một cách dễ dàng hoặc dễ dàng tùy chỉnh Ta có thể nhúng thêm view engine, cơ chế định tuyến cho URL, cách kết xuất tham số của action-method và các thành phần khác ASP.NET MVC cũng hỗ trợ việc sử dụng Dependency Injection (DI) và Inversion of Control (IoC) DI cho phép ta gắn các đối tượng vào một lớp cho lớp đó sử dụng thay vì buộc lớp đó phải tự mình khởi tạo các đối tượng IoC quy định rằng, nếu một đối tượng yêu cầu một đối tượng khác, đối tượng đầu sẽ lấy đối tượng thứ hai từ một nguồn bên ngoài, ví dụ như từ tập tin cấu hình Và nhờ vậy, việc sử dụng DI và IoC sẽ giúp kiểm thử dễ dàng hơn

- ASP.NET MVC có thành phần ánh xạ URL mạnh mẽ cho phép ta xây dựng những ứng dụng có các địa chỉ URL xúc tích và dễ tìm kiếm Các địa chỉ URL không cần phải có phần mở rộng của tên tập tin và được thiết kế để hỗ trợ các mẫu định dạng tên phù hợp với việc tối ưu hóa tìm kiếm (URL) và phù hợp với lập địa chỉ theo kiểu REST

XÂY DỰNG ỨNG DỤNG VỚI ASP.NET MVC

Tính năng ASP.NET MVC Framework đã được tích hợp sẵn từ phiên bản VS Studio

Tạo Project với ASP.NET MVC Web Application

Trong chương trình Visual Studio 2008 đã cài đặt ASP.NET MVC Framework, ta thực hiện: Tập tin  New Project  Windows C#  ASP.NET MVC Web Application

Hình 5.2: Tạo ứng dụng MVC

Khi ta tạo một ASP.NET MVC Framework thì hộp thoại Unit Test xuất hiện Ta cần chọn Yes nếu muốn tạo Project Test, chọn No nếu không muốn tạo một Unit Test

Sau khi một ứng dụng ASP.NET MVC Web

Application được tạo, ta nhìn vào trong mục

Solution Explorer sẽ thấy xuất hiện mặc định

3 thư mục: Models, Views, Controllers chứa các đối tượng tương ứng với các thành phần

Models, Views, Controllers trong mô hình

Ta có thể mở rộng thư mục Controllers sẽ thấy HomeController.cs, mở rộng thư mục

Views sẽ thấy thư mục Home, Shared và

Account, mở rộng thư mục Home sẽ thấy

About.aspx và Index.aspx

Ta thực thi ứng dụng bằng cách ấn F5

Nếu là ứng dụng mới tạo lần đầu, ta sẽ thấy thông báo hỏi có cho phép mở chế độ Debug hay không Nếu ta đồng ý chọn “Modify the Web.config file to enable debugging”, hoặc không muốn debug thì chọn “Run without debugging”

Hình 5.4: Minh họa các bước tạo một ASP.NET MVC

Hình 5.3: Quản trị cơ sở dữ liệu trong dự án dạng MVC của ASP.Net

Kết quả khi chạy ứng dụng (h5.5) là ứng dụng được nạp vào trình duyệt Trong ví dụ này ta chỉ có 2 trang là Index và About

Hình 5.5: Chương trình MVC đầu tiên

ĐỊNH TUYẾN URL

ASP.NET MVC Framework có một hệ thống định tuyến URL (URL Routing System) linh hoạt cho phép xác định các quy tắc ánh xạ địa chỉ URL bên trong ứng dụng Một hệ thống định tuyến có 2 mục đích:

- Xây dựng một tập hợp các URL đi vào ứng dụng và định tuyến chúng tới các Controller và thực thi các phương thức Action để xử lý

- Xây dựng các URL gửi đi mà có thể gọi ngược trở lại Controllers/Actions Ví dụ: form posts, liên kết và các lời gọi AJAX

Ta sử dụng các quy tắc ánh xạ URL để điều khiển URL đi vào và đi ra để tăng tính mềm dẻo cho việc lập trình ứng dụng, nghĩa là nếu muốn thay đổi cấu trúc URL Ví dụ /Catalog thành /Products, có thể thay đổi một tập hợp quy tắc ánh xạ mức ứng dụng mà không cần phải viết lại mã lập trình bên trong Controllers và Views

Các quy tắc định tuyến URL mặc định trong ASP.NET MVC Web Application

- Mặc định khi tạo ứng dụng với ASP.NET MVC Web Application trong Visual Studio sẽ tạo ra một ASP.NET Application class gọi là Global.asax chứa cấu hình các quy tắc định tuyến URL Xây dựng các định tuyến thông qua phương thức RegisterRoutes và khi ứng dụng bắt đầu, phương thức Application_Start() trong Global.asax.cs sẽ gọi RegisterRoutes để tạo ra bảng định tuyến.rs

- Với ASP.NET MVC Web Application thì mặc định Controllers là HomeController, mặc định ControllerAction là Index, mặc định Id là rỗng Nghĩa là khi gọi trang web được xây dựng thông qua template ASP.NET Web với http: //localhost/Home/Index/

Khi ứng dụng ASP.NET MVC Web Application nhận được một Url, MVC Framework sẽ định giá các quy tắc định tuyến trong tập hợp RouteTable.Routes để quyết định

Controller nào sẽ điều khiển request MVC framework chọn Controller bằng cách định giá các quy tắc trong bảng định tuyến theo trật tự đã có sẵn

Tìm hiểu định tuyến URL

Trình duyệt yêu cầu một địa chỉ từ controller action trong ASP.NET MVC Framework được gọi là định tuyến URL (URL routing) Url routing sẽ chỉ định yêu cầu tới controller action URL routing sử dụng một bảng định tuyến để điều khiển các request Bảng định tuyến được tạo khi ứng dụng bắt đầu được chạy lần đầu tiên Bảng định tuyến được thiết lập trong tập tin Global.asax như sau: using System; using System.Globalization; using System.Threading; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace VPAdmin

// Note: For instructions on enabling IIS6 or IIS7 classic mode,

// visit http://go.microsoft.com/?LinkId94801 public class VisionPointMVCApplication : System.Web.HttpApplication

{ public static void RegisterRoutes(RouteCollection routes)

{ routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); routes.MapRoute(

“{controller}/{action}/{id}”, // URL with parameters new { controller = “Home”, action = “Index”, id =

} protected void Application_BeginRequest(object sender, EventArgs e)

HttpContext.Current.Response.AddHeader(“Access-Control-Allow-Origin”,

“*”); if (HttpContext.Current.Request.HttpMethod == “OPTIONS”)

HttpContext.Current.Response.AddHeader(“Cache-Control”, “no-cache”); HttpContext.Current.Response.AddHeader(“Access-Control-Allow-

HttpContext.Current.Response.AddHeader(“Access-Control-Allow-

HttpContext.Current.Response.AddHeader(“Access-Control-Max-Age”,

Khi ứng dụng chạy lần đầu tiên, phương thức Application_Start() được gọi, phương thức này gọi một phương thức khác RegisterRoutes(RouteTable.Routes) để tạo ra bảng định tuyến Định tuyến mặc định chia một yêu cầu thành 3 phân đoạn, mỗi phân đoạn nằm giữa

2 dấu “/” Phân đoạn đầu tiên chứa tên một controller, phân đoạn thứ 2 chứa tên controller action, phân đoạn thứ 3 là tham số đầu vào của controller action

Ví dụ: với địa chỉ /Product/Details/3 được hiểu là:

Controller = ProductController Action = Detail Id = 3

Ví dụ: với địa chỉ /Employee:

Controller = EmployeeController Action = Index Id = “”

Mô hình MVC (Models, Views, Controllers) chia giao diện UI thành 3 phần tương ứng: đầu vào của controller là các điều khiển thông qua HTTP request, model chứa các miền logic, view là những thứ được sinh ra trả về cho trình duyệt

ASP.NET MVC là một nền tảng mở rộng và cắm ghép hỗ trợ tùy chỉnh và thay thế dễ dàng Nó cho phép nhúng các thành phần như view engine, cơ chế định tuyến URL và cách kết xuất tham số action-method ASP.NET MVC cũng hỗ trợ Dependency Injection (DI) và Inversion of Control (IoC), giúp gắn các đối tượng vào một lớp thay vì tự khởi tạo và lấy các đối tượng cần thiết từ nguồn bên ngoài Điều này giúp kiểm thử dễ dàng hơn.

ASP.NET MVC có thành phần ánh xạ URL mạnh mẽ cho phép ta xây dựng những ứng dụng có các địa chỉ URL xúc tích và dễ tìm kiếm Các địa chỉ URL không cần phải có phần mở rộng của tên tập tin và được thiết kế để hỗ trợ các mẫu định dạng tên phù hợp với việc tối ưu hóa tìm kiếm (URL) và phù hợp với lập địa chỉ theo kiểu REST

Hỗ trợ các tính năng có sẵn của ASP.NET như cơ chế xác thực người dùng, quản lý thành viên, quyền, output caching và data caching, seession và profile, quản lý tình trạng ứng dụng, hệ thống cấu hình …

Câu 1: Trong một ứng dụng MVC, liệu có tồn tại 1 mô hình dữ liệu Models, có n

Controllers, mỗi Controllers điều khiển m Views không?

Câu 2: Views của MVC có thể sử dụng AJAX, javascript không?

Câu 3: Xây dựng ứng dụng với ASP.NET MVC Framework thì trang web sẽ chạy nhanh hơn so với xây dựng trên nền WebForm cũ?

Câu 4: Có phải thực hiện test và debug trên ASP.NET MVC Framework dễ dàng hơn so với nền tảng WebForm Đáp: Đúng Vì việc thực hiện test và debug trên ASP.NET MVC Framework chỉ phải thực hiện trên Controller nên dễ dàng kiểm soát hơn so với thực hiện test và debug trên WebForm.

TỔNG QUAN VỀ ASP.NET CORE

TỔNG QUAN ASP.NET C ORE

Giới thiệu ASP.NET Core

ASP.NET Core là phiên bản mã nguồn mở của ASP.NET, có thể chạy trên các hệ điều hành Windows, Linux, macOS và Docker

ASP.NET Core là phiên bản mới của Framework Web ASP.NET, chủ yếu được thiết kế để chạy trên nền tảng NET Core ASP.NET Core là một Framework MIỄN PHÍ, MÃ NGUỒN MỞ, HIỆU SUẤT CAO, NHẸ và ĐA NỀN TẢNG, dùng để xây dựng Ứng dụng Web trên nền tảng NET (.NET Core)

Hiệu suất là một trong những điểm chú trọng chính của ASP.NET Core Nó nhanh hơn so với các framework web phổ biến khác ASP.NET Core được thiết kế mô-đun hóa, sau đó có thể thêm các tính năng nâng cao hơn dưới dạng Gói NuGet theo yêu cầu của ứng dụng Điều này dẫn đến hiệu suất cao, yêu cầu ít bộ nhớ và kích thước triển khai, và dễ dàng bảo trì

.NET (.NET Core) là mã nguồn mở và đa nền tảng, được Microsoft và cộng đồng NET duy trì trên GitHub Ứng dụng ASP.NET Core phiên bản 3.x và các phiên bản sau này chỉ có thể phát triển và chạy trên nền tảng NET Core (Đa nền tảng), trong khi các ứng dụng ASP.NET Core 1.x và 2.x có thể phát triển và chạy trên cả NET Core (Đa nền tảng) lẫn NET Framework (Chỉ Windows)

Phiên bản gần đây của NET Core là NET 7, được phát hành vào tháng 11 năm 2022 Bắt đầu từ NET 5.0, Microsoft NET core đã được đổi tên thành NET Vì vậy từ nay về sau, từ "Core" sẽ không được sử dụng nữa, và chúng sẽ được gọi là NET 6, NET 7, v.v

Lý do chọn ASP.NET Core?

Ngày nay, ASP.NET Core được ưa chuộng bởi các nhà phát triển vì nhiều lý do, bao gồm:

ASP.NET Core framework là Mã nguồn mở, đó là lý do chính đằng sau sự phổ biến của nó Toàn bộ Mã nguồn của NET Core Framework này có sẵn tại https://github.com/aspnet và bạn có thể tải xuống mã nguồn miễn phí Thậm chí nếu muốn, bạn cũng có thể sửa đổi và biên dịch phiên bản của riêng mình Đa nền tảng:

ASP.NET Core Framework được thiết kế từ đầu để đảm bảo là Đa nền tảng cho cả phát triển và triển khai Các phiên bản trước của ứng dụng ASP.NET Framework chỉ có thể chạy trên nền tảng Windows Ngược lại, các ứng dụng ASP.NET Core có thể được phát triển và chạy trên các nền tảng khác nhau như hệ điều hành Windows, Mac hoặc Linux Chúng ta chỉ có thể chạy các ứng dụng ASP.NET Framework 4.x trước đó trên IIS, trong khi đó chúng ta có thể lưu trữ các ứng dụng ASP.NET Core trên IIS, Nginx, Docker, Apache, Để phát triển ứng dụng ASP.NET Core, bạn có nhiều lựa chọn; bạn có thể sử dụng Visual Studio hoặc Visual Studio Code Nếu muốn, bạn cũng có thể sử dụng bất kỳ trình chỉnh sửa bên thứ ba nào mà bạn chọn, chẳng hạn như ATOM, Sublime, v.v

Khi sử dụng lệnh CLI (Giao diện dòng lệnh), bạn có thể phát triển và chạy các ứng dụng NET cũng như xuất bản ứng dụng bằng lệnh CLI

Tốc độ thực thi nhanh:

ASP.NET Core cho thấy hiệu suất cao so với các phiên bản NET trước đó

Một trong những mẫu thiết kế được sử dụng quan trọng nhất trong ứng dụng thời gian thực là Mẫu thiết kế DI Nó bao gồm bộ chứa IoC tích hợp để thêm phần phụ thuộc tự động, giúp ứng dụng có độ linh hoạt cao

API Web và MVC hợp nhất:

ASP.NET Core cung cấp mô hình lập trình thống nhất cho cả ứng dụng web và API web, sử dụng chung bộ điều khiển xử lý cả hai chức năng Bộ điều khiển kế thừa từ lớp cơ sở Bộ điều khiển và trả về giao diện IActionResult, cung cấp nhiều tùy chọn triển khai.

Trong ứng dụng API của ASP.NET Core Web, phương thức hành động của bộ điều khiển sẽ trả về JsonResult Đồng thời, nếu là ứng dụng ASP.NET Core Web thì phương thức hành động của bộ điều khiển là kiểu trả về sẽ là ViewResult

Kiểm thử và bảo trì:

Bạn có thể dễ dàng kiểm thử và bảo trì các ứng dụng được phát triển bằng khung ASP.NET Core MVC Điều này có thể thực hiện được vì nó cho phép bạn tách các phần khác nhau của ứng dụng thành các phần độc lập và cũng cho phép bạn kiểm tra chúng một cách độc lập MSTtest, xUnit và MOQ có thể dễ dàng tích hợp vào các ứng dụng ASP.NET Core MVC để mô phỏng mọi tình huống

ASP.NET Core MVC Framework được thiết kế để có khả năng mở rộng cao

Sự khác biệt giữa NET Framework và NET Core

 NET framework chỉ tương thích với Hệ điều hành Windows Nó dựa trên các thành phần và API chỉ dành cho Windows và được tích hợp chặt chẽ với hệ sinh thái Windows

 NET Framework là phần mềm độc quyền được phát triển và duy trì bởi Microsoft

 NET Framework phù hợp với nhiều loại ứng dụng, bao gồm ứng dụng máy tính để bàn (Windows Forms, WPF), ứng dụng web (ASP.NET Web Forms, MVC) và dịch vụ (Windows Services, WCF)

 NET Core được thiết kế để hoạt động độc lập với nền tảng hoặc đa nền tảng và chạy trên nhiều hệ điều hành Khả năng đa nền tảng này giúp nó phù hợp để xây dựng các ứng dụng có thể được triển khai trên môi trường Windows, macOS và Linux

 NET Core là mã nguồn mở trên GitHub và có hơn 100.000 đóng góp và 3.700 công ty đã đóng góp

So sánh ASP.NET với ASP.NET Core

ASP.NET Web (thường được biết đến với tên gọi ASP.NET) và ASP.NET Core Web là hai framework phát triển web của Microsoft, nhưng chúng có những khác biệt rõ ràng về kiến trúc, khả năng tương thích và tính năng Dưới đây là một số điểm so sánh chính giữa hai nền tảng này: Đa Nền Tảng

- ASP.NET Web: Chủ yếu hỗ trợ và chạy trên Windows

- ASP.NET Core Web: Hỗ trợ đa nền tảng, có thể chạy trên Windows, Linux, và macOS

- ASP.NET Web: Hiệu suất tốt nhưng không được tối ưu hóa như ASP.NET Core

- ASP.NET Core Web: Được thiết kế để có hiệu suất cao hơn với kiến trúc mô-đun và tối ưu hóa

- ASP.NET Web: Có cấu trúc monolithic với các thành phần được tích hợp sẵn

- ASP.NET Core Web: Cấu trúc mô-đun cho phép tích hợp linh hoạt các thành phần thông qua NuGet packages

Cập Nhật và Bảo Trì

- ASP.NET Web: Cập nhật có thể phụ thuộc vào các bản cập nhật của NET Framework và Windows

- ASP.NET Core Web: Có thể cập nhật độc lập với hệ điều hành, dễ dàng bảo trì và triển khai

- ASP.NET Web: Không được thiết kế với cloud-native trong tâm trí từ ban đầu

- ASP.NET Core Web: Được xây dựng với tính năng cloud-ready, phù hợp cho các ứng dụng đám mây

- ASP.NET Web: Thường sử dụng Web Forms, MVC, Web API, và SignalR

- ASP.NET Core Web: Sử dụng MVC và Razor Pages cho phát triển web, cũng như Blazor cho Single Page Applications (SPA)

Cấu Hình và Quản Lý

- ASP.NET Web: Sử dụng web.config cho cấu hình

- ASP.NET Core Web: Sử dụng appsettings.json, biến môi trường, và các nguồn cấu hình khác, cung cấp linh hoạt hơn trong quản lý cấu hình

- ASP.NET Web: Hỗ trợ thông qua các thư viện bên thứ ba

- ASP.NET Core Web: Tích hợp sẵn hỗ trợ Dependency Injection

- ASP.NET Web: Phát triển theo mô hình truyền thống của NET Framework

- ASP.NET Core Web: Tuân theo mô hình phát triển hiện đại với NET Core và sau này là NET 5 trở lên

Tương Lai và Hỗ Trợ

- ASP.NET Web: Vẫn được hỗ trợ nhưng không còn là trọng tâm phát triển của Microsoft

- ASP.NET Core Web: Là tương lai của phát triển web NET với sự hỗ trợ mạnh mẽ và cập nhật liên tục từ Microsoft

XÂY DỰNG ỨNG DỤNG VỚI ASP.NET C ORE

Tạo Project với ASP.NET Core Empty Để tạo Project ASP.NET Core mới hãy mở Visual Studio 2022, sau đó nhấp vào

Hình 6-3 Tạo Project ASP.NET Core

Sau khi bạn nhấp vào Create a new project, cửa sổ sẽ hiện lên “ Create a new project” Cửa sổ này bao gồm các mẫu ứng dụng NET 6 khác nhau Ở đây ta sẽ tạo một ứng dụng Web đơn giản từ đầu, vì vậy hãy chọn mẫu dự án ASP.NET Core Empty và nhấp vào nút Next như trong hình bên dưới

Hình 6-4 Chọn mẫu ứng dụng NET 6

Khi bạn nhấp vào nút Next, nó sẽ mở ra cửa sổ Configure your new project Bạn cần cung cấp thông tin cần thiết để tạo một dự án mới Đầu tiên, đặt tên thích hợp cho dự án của bạn, đặt vị trí bạn muốn tạo dự án này và tên giải pháp cho ứng dụng ASP.NET Core Web Sau khi nhập xong thông tin ta tiếp tục nhấn vào nút Next

Hình 6-5 Thông tin của ứng dụng khi tạo

Khi bạn nhấp vào nút Next, cửa sổ Additional Information Ở đây, bạn cần chọn

NET 6.0 làm Framework, bạn cũng cần chọn cấu hình cho HTTPS rồi cuối cùng, nhấp vào nút Create

Hình 6-6 Phiên bản của ASP.NET Core

Sau khi bạn nhấp vào nút Create, hệ thống sẽ tạo một Ứng Dụng Web ASP.NET Core mới trong Visual Studio 2022 sử dụng NET 6 Hãy chờ một thời gian cho đến khi Visual Studio khôi phục các gói trong dự án Quá trình khôi phục có nghĩa là

Visual Studio sẽ tự động thêm, cập nhật hoặc xóa các phụ thuộc được cấu hình như

Gói NuGet trong dự án Dự án sẽ được tạo với cấu trúc tệp và thư mục sau trong

Visual Studio 2022 Sự thay đổi lớn bạn có thể thấy ở đây là chúng ta không còn lớp

Khởi Động (Startup class) nữa, mà chúng ta đã tìm thấy trong phiên bản trước của

Khung Làm Việc ASP.NET Core Hình 6-7 ứng dụng ASP.NET Core Để chạy Ứng dụng web ASP.NET Core hãy nhấp vào IIS Express hoặc nhấn F5 (có Debug) hoặc Ctrl + F5 (không có Debug) Điều này sẽ mở trình duyệt và hiển thị đầu ra sau Sau khi chạy lên ta được kết quả như hình bên dưới

Hình 6-8 Kết quả khi chạy chương trình

Bây giờ hãy mở tệp Program.cs và sau đó thay đổi “ Hello World! ” thành chuỗi khác như trong đoạn mã bên dưới và chạy lại ứng dụng, nó sẽ thay đổi kết quả đầu ra tương ứng

ASP.NET Core là một framework phát triển web đa nền tảng, hiện đại, mạnh mẽ và linh hoạt của Microsoft Nó cho phép xây dựng các ứng dụng web, API, và thậm chí là các ứng dụng đám mây với hiệu suất cao ASP.NET Core được thiết kế để hỗ trợ cả phát triển trên Windows, Linux, và macOS, mang lại khả năng chạy môi trường phát triển và sản xuất một cách nhất quán Các tính năng như dependency injection, logging, authentication và authorization được xây dựng sẵn trong framework, giúp việc phát triển trở nên nhanh chóng và an toàn hơn

Một trong những điểm nổi bật của ASP.NET Core là kiến trúc mô-đun của nó, cho phép các nhà phát triển chọn và lựa các thành phần cần thiết thông qua NuGet packages để tối ưu hóa ứng dụng của họ Framework này cũng tập trung vào việc tạo ra các ứng dụng "cloud-ready" ngay từ đầu, với tích hợp sâu vào Azure và hỗ trợ containerization thông qua Docker ASP.NET Core cập nhật liên tục để đáp ứng các xu hướng công nghệ mới nhất và đảm bảo rằng các ứng dụng có thể mở rộng và bảo mật theo thời gian

Câu 1: Dependency Injection (DI) trong ASP.NET Core hoạt động như thế nào và nó mang lại lợi ích gì?

Câu 2: So sánh hiệu suất giữa ứng dụng xây dựng trên ASP.NET Core MVC và ASP.NET Web Forms?

Câu 3: ASP.NET Core hỗ trợ các phương thức HTTP nào trong việc xây dựng Web API?

Câu 4: Trong ASP.NET Core MVC, một Controller có thể quản lý bao nhiêu Views và mỗi View có thể được liên kết với bao nhiêu Models?

Câu 5: Cách thức triển khai Dependency Injection trong ASP.NET Core hoạt động như thế nào?

TỔNG QUAN VỀ ASP.NET CORE MVC

TỔNG QUAN ASP.NET C ORE MVC

Giới thiệu ASP.NET CORE MVC

MVC là viết tắt của Model View và Controller Nó là một mẫu thiết kế kiến trúc, có nghĩa là nó được sử dụng ở cấp độ kiến trúc của ứng dụng Vì vậy, bạn cần nhớ rằng MVC không phải là ngôn ngữ lập trình MVC không phải là một Framework Đó là một mẫu thiết kế Khi thiết kế một ứng dụng, đầu tiên chúng ta tạo ra kiến trúc của ứng dụng đó và MVC đóng một vai trò quan trọng trong kiến trúc của ứng dụng cụ thể đó

Hình 7-1 Mô Hình ASP.NET Core MVC

Mô hình trong ASP.NET Core MVC là nơi thể hiện trạng thái của ứng dụng và xử lý logic nghiệp vụ của nó Logic nghiệp vụ được đóng gói trong mô hình, cùng với logic triển khai để duy trì trạng thái của ứng dụng.

Trong ASP.NET Core MVC, "Mô hình" đóng vai trò cốt lõi trong mô hình Model-View-Controller (MVC) Nó nắm giữ cấu trúc dữ liệu của ứng dụng, xử lý logic dữ liệu và tương tác với cơ sở dữ liệu.

Model chứa các lớp đại diện cho dữ liệu và logic nghiệp vụ của ứng dụng, và thường được sử dụng để truy xuất và lưu trữ dữ liệu trong cơ sở dữ liệu

Dưới đây là một số khái niệm chính liên quan đến Model trong ASP.NET Core MVC:

Mỗi model có thể chứa thuộc tính và phương thức để biểu diễn và xử lý dữ liệu liên quan đến đối tượng cụ thể trong ứng dụng của bạn

Dựa trên annotations trên dữ liệu, model có thể xác định cách dữ liệu được hiển thị và các quy tắc xác thực Ví dụ, người dùng có thể định nghĩa những ràng buộc như bắt buộc, giá trị trong phạm vi hoặc định dạng đặc biệt cho ngày tháng.

Khi sử dụng Entity Framework Core (EF Core), model có thể đại diện cho các bảng trong cơ sở dữ liệu và mối quan hệ giữa chúng EF Core sử dụng các model để tạo ra các truy vấn và thao tác với cơ sở dữ liệu thông qua LINQ

ASP.NET Core có khả năng tự động ánh xạ dữ liệu từ các yêu cầu HTTP vào các model khi một action được gọi trong controller Điều này giúp giảm bớt công việc phải viết mã để thu thập dữ liệu từ các form và query string

Model có thể bao gồm logic xác thực để đảm bảo rằng dữ liệu nhập vào từ người dùng là hợp lệ trước khi xử lý hoặc lưu trữ nó

Việc sử dụng model giúp tách biệt rõ ràng giữa logic xử lý nghiệp vụ (trong model), logic điều khiển ứng dụng (trong controller), và hiển thị giao diện người dùng (trong view), theo đúng nguyên tắc của MVC

Model trong ASP.NET Core MVC là một phần không thể thiếu, giúp tổ chức mã nguồn một cách rõ ràng, dễ bảo trì và phát triển, cũng như tối ưu hóa việc tương tác với cơ sở dữ liệu và xử lý dữ liệu trong ứng dụng web của bạn

Ví dụ: Tạo một mô hình để hiển thị dữ liệu Sinh Viên Vì vậy, hãy tạo một tệp lớp có tên Student.cs trong thư mục Models

Tiếp theo trong lớp Student.cs có chứa 5 thuộc tính để giữ thông tin của sinh viên namespace QuanLySinhVien.Models { public class Student { public int StudentId { get; set; } public string? Name { get; set; } public string? Branch { get; set; } public string? Section { get; set; } public string? Gender { get; set; }

} Đây là mô hình sinh viên sẽ lưu trữ dữ liệu sinh viên trong bộ nhớ Mô hình Ứng dụng ASP.NET Core MVC cũng chứa logic nghiệp vụ để quản lý dữ liệu

Tiếp theo ta tạo lớp IStudentRepository.cs trong Model Trong

IStudentRepository.cs chứa phương thức GetStudentById(), phương thức này sẽ truy xuất thông tin chi tiết về sinh viên theo id sinh viên namespace QuanLySinhVien.Models { public interface IStudentRepository {

Ta hãy tạo một tệp lớp có tên StudentRepository trong thư mục Model có chứa thông tin sinh viên vì trong demo này chúng ta không nói về cách truy xuất thông tin chi tiết từ cơ sở dữ liệu namespace QuanLySinhVien.Models { public class StudentRepository : IStudentRepository { public List DataSource() { return new List()

{ new Student() { StudentId = 101, Name = "James", Branch = "CSE", Section =

"A", Gender = "Male" }, new Student() { StudentId = 102, Name = "Smith", Branch = "ETC", Section =

"B", Gender = "Male" }, new Student() { StudentId = 103, Name = "David", Branch = "CSE", Section =

"A", Gender = "Male" }, new Student() { StudentId = 104, Name = "Sara", Branch = "CSE", Section =

"A", Gender = "Female" }, new Student() { StudentId = 105, Name = "Pam", Branch = "ETC", Section =

} public Student GetStudentById(int StudentId) { return DataSource().FirstOrDefault(e => e.StudentId == StudentId) ?? new

Phần StudentController trong Thư mục Controller Nếu bạn chưa tạo, hãy thêm tệp lớp có StudentController trong thư mục Sau đó sửa đổi StudentController như hiển thị bên dưới để sử dụng StudentRepository viên nhằm lấy thông tin chi tiết về sinh viên StudentRepository và Student nằm trong một không gian tên riêng biệt, do đó bạn cũng phải bao gồm các không gian tên đó using Microsoft.AspNetCore.Mvc; using QuanLySinhVien.Models; namespace QuanLySinhVien.Controllers { public class StudentController : Controller { public JsonResult GetStudentDetails(int Id) { var repository = new StudentRepository();

Student studentDetails = repository.GetStudentById(Id); return Json(studentDetails);

XÂY DỰNG ỨNG DỤNG VỚI ASP.NET C ORE MVC

Tạo Project với ASP.NET Core MVC Để tạo ứng dụng web ASP.NET Core MVC Đầu tiên hãy mở Visual Studio 2022 rồi nhấp vào tab Create a new project => cửa sổ Create a new project hiện lên tại đây ta chọn “ASP.NET Core Web App (Model-View-Controller)” => cửa sổ

Configure your new project hiện lên chọn vào Next => cửa sổ Additional Information hiện lên chọn vào Create

Hình 7-6 Tạo ứng dụng với ASP.NET Core MVC

Khi ta nhấp vào nút Create, dự án sẽ được tạo bằng Ứng dụng web (Model-View-Controller), ta nhìn vào trong mục Solution Explorer sẽ thấy xuất hiện mặc định 3 thư mục: Models, Views, Controllers chứa các đối tượng tương ứng với các thành phần Models, Views, Controllers trong mô hình MVC và ta có thể hiểu từng thành phần như sau:

Danh mục Phụ thuộc (Dependencies) trong NuGet liệt kê những phụ thuộc cần thiết để ứng dụng ASP.NET Core chạy thành công Khi người dùng bổ sung các gói mới theo nhu cầu, chúng sẽ tự động được thêm vào thư mục phụ thuộc này (thư mục Packages, là một thư mục con của Dependencies).

 Properties (Thuộc tính): Thư mục này chứa tệp launchsettings.json và chỉ được sử dụng trong môi trường phát triển Nó sẽ không có sẵn khi chúng ta xuất bản dự án và do đó không có sẵn trong bất kỳ môi trường nào khác

 wwwroot: Đây là thư mục gốc web của dự án Thư mục wwwroot sẽ chứa tất cả các tệp tĩnh như css, js, và các tệp bootstrap, v.v

 Controllers (Bộ điều khiển): Tất cả các lớp điều khiển đều nằm trong thư mục Controllers

 Models: Tất cả các lớp đại diện cho các model đều được đặt trong thư mục

 Views (Giao diện): Chứa các tệp giao diện Razor (.cshtml) để hiển thị nội dung HTML

 Shared (Chia sẻ): Thư mục Shared dưới thư mục Views chứa

_Layout.cshtml Đó là bố cục mặc định cho ứng dụng ASP.NET core Nó bao gồm tiêu đề ứng dụng, chân trang và điều hướng

Tập tin appsettings.json lưu trữ các thiết lập để sử dụng trong toàn ứng dụng, chẳng hạn như chuỗi kết nối và biến toàn cục trong phạm vi ứng dụng.

Hình 7-7 Mô hình MVC trong ứng dụng ASP.NET Core MVC

 Program.cs: Lớp Program chứa phương thức Main, điểm khởi chạy của Ứng

Dụng Web ASP.NET Core của chúng ta Phương thức Main chịu trách nhiệm thiết lập máy chủ web, cấu hình các dịch vụ (Cả Tích hợp và Do Người Dùng Định nghĩa), cấu hình các Thành phần Middleware (Cả Tích hợp và Do Người Dùng Định nghĩa) và khởi động ứng dụng để ứng dụng có thể lắng nghe các Yêu cầu HTTP Đến Để chạy Ứng dụng web ASP.NET Core MVC hãy nhấp vào IIS Express hoặc nhấn F5 (có Debug) hoặc Ctrl + F5 (không có Debug) Sau khi chạy lên ta được kết quả như hình bên dưới

Hình 7-8 Kết quả sau khi tạo ứng dụng với ASP.NET Core MVC

Một Model trong ứng dụng ASP.NET Core MVC chứa tất cả các nghiệp vụ logic mà không có trong controllers và views Models chứa tất cả các tầng truy xuất dữ liệu logic và tầng nghiệp vụ logic Ví dụ, nếu sử dụng LINQ to SQL để truy nhập dữ liệu thì phải tạo LINQ to SQL class (tập tin định dạng dbml) trong folder Models

Bộ điều khiển chịu trách nhiệm kiểm soát tương tác của người dùng trong ứng dụng MVC Bộ điều khiển quyết định những gì được trả về cho người dùng khi người dùng tạo yêu cầu trên trình duyệt.

View là phần giao diện người dùng, nơi dữ liệu được hiển thị và trình bày View sử dụng Razor, một cú pháp cho phép kết hợp mã C# với HTML, để tạo ra trang web động View đóng vai trò quan trọng trong việc duy trì "Separation of Concerns" bằng cách tách biệt logic ứng dụng khỏi giao diện người dùng Điều này không chỉ giúp mã nguồn dễ quản lý và bảo trì hơn mà còn cho phép tái sử dụng hiệu quả các thành phần giao diện qua View Components View còn hỗ trợ các Layouts để định hình khung sườn chung cho các trang, và Tag Helpers để quản lý các thành phần HTML một cách trực quan Các View có thể là kiểu mạnh, giúp tận dụng IntelliSense và kiểm tra lỗi ở thời điểm biên dịch

Câu 1: Tạo một ứng dụng ASP.NET Core MVC đơn giản mà khi người dùng truy cập, nó sẽ hiển thị "Hello World" trên trình duyệt

- Tạo một Controller mới có tên là `HelloWorldController`

- Trong Controller đó, thêm một Action `Index` trả về `ViewResult` và hiển thị một View đơn giản với nội dung "Hello World"

- Tạo một View mới có tên là `Index.cshtml` trong thư mục `Views/HelloWorld` và viết mã HTML để hiển thị "Hello World"

Câu 2: Xây dựng một ứng dụng quản lý sách đơn giản với các chức năng thêm, xem danh sách

- Tạo một Model `Book` với ít nhất hai thuộc tính: `Title` và `Author`

- Tạo một Controller `BooksController` với hai Actions: `Index` để hiển thị danh sách sách, và `Create` để thêm sách mới

- Tạo các View tương ứng cho Actions: `Index.cshtml` để hiển thị danh sách và

`Create.cshtml` với một form để nhập thông tin sách mới

Câu 3: Tạo chức năng đăng nhập cơ bản không cần xác thực từ cơ sở dữ liệu

- Tạo một Model `User` với hai thuộc tính: `Username` và `Password`

- Tạo một Controller `AccountController` với Action `Login` để hiển thị form đăng nhập và xử lý thông tin đăng nhập

- Tạo View `Login.cshtml` chứa form với hai trường nhập liệu cho `Username` và

- Thêm logic vào Action `Login` để kiểm tra nếu `Username` và `Password` khớp với một cặp giá trị cố định, người dùng sẽ được thông báo đăng nhập thành công.

KỸ THUẬT TRUYỀN DỮ LIỆU TRONG ASP.NET CORE MVC

V IEW B AG TRONG ASP.NET C ORE MVC

ViewBag là một đặc tính trong ASP.NET Core MVC hỗ trợ truyền dữ liệu từ Controller đến View Đặc tính này tạo ra một cách thuận tiện và linh hoạt để chia sẻ dữ liệu giữa các thành phần MVC.

`ViewBag` là một wrapper quanh `ViewData` và cung cấp một cách truy cập động tới các giá trị của nó, cho phép bạn thêm các thuộc tính một cách động mà không cần định nghĩa chúng trước Ưu điểm:

 Đơn giản và dễ sử dụng

 Không yêu cầu casting hay kiểm tra kiểu dữ liệu khi lấy giá trị

 Tăng tính linh hoạt khi truyền dữ liệu đến View

 Không có kiểm tra kiểu dữ liệu ở compile-time

 Không thích hợp cho việc truyền dữ liệu phức tạp hoặc lớn

Bạn có thể gán giá trị cho `ViewBag` bằng cách thêm các thuộc tính mới: public IActionResult Index()

ViewBag.Message = "Welcome to ASP.NET Core MVC!";

ViewBag.Year = DateTime.Now.Year; return View();

Giá trị có thể được truy xuất một cách đơn giản thông qua các thuộc tính đã được gán:

Giả sử bạn muốn hiển thị một danh sách sản phẩm và một thông điệp chào mừng trong View của bạn Dưới đây là cách bạn có thể làm điều đó sử dụng `ViewBag`

Trong Controller: public IActionResult Products()

ViewBag.WelcomeMessage = "Explore our diverse product range!";

ViewBag.Products = new List { "Laptop", "Smartphone", "Headphones" }; return View();

@foreach (var product in ViewBag.Products)

Khi View `Products` được render, nó sẽ hiển thị thông điệp chào mừng và danh sách sản phẩm được truyền từ Controller thông qua `ViewBag`.

Ngày đăng: 03/06/2024, 19:08

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
3. Bill Evjen, Scott Hanselman, Devin Rader (2008). Professional ASP.NET 3.5 In C# And VB Sách, tạp chí
Tiêu đề: Professional ASP.NET 3.5 In C#
Tác giả: Bill Evjen, Scott Hanselman, Devin Rader
Năm: 2008
1. Visual Web Developer, URL: http://msdn.microsoft.com/en- us/library/ms178093.aspx Link
4. jQuery, URL: http://docs.iquery.com Link
7. Mã nguồn tham khảo ở http://www.wrox.com Link
8. Các chủ đề lập trình ở http://www.codeguru.com, http://www.codeproject.com hay http://www.java2s.com Link
2. Microsoft ASP.NET, URL: http: //www .ASP.NET/ Khác
6. MSDN Online hoặc offline của Microsoft Khác

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Kiến trúc .Net Framework - Giáo trình lập trình Web
Hình 1.1 Kiến trúc .Net Framework (Trang 11)
Hình 1.2: Tạo mới dự án - Giáo trình lập trình Web
Hình 1.2 Tạo mới dự án (Trang 22)
Hình 1.3: Chọn ứng dụng ASP.NET Web Application - Giáo trình lập trình Web
Hình 1.3 Chọn ứng dụng ASP.NET Web Application (Trang 23)
Hình 1.4: Tạo dự án dạng ASP.NET Web Application - Giáo trình lập trình Web
Hình 1.4 Tạo dự án dạng ASP.NET Web Application (Trang 24)
Hình 3.1: Thêm Sql cơ sở dữ liệu từ dự án - Giáo trình lập trình Web
Hình 3.1 Thêm Sql cơ sở dữ liệu từ dự án (Trang 39)
Hình 3.5: Kết hợp dữ liệu với SqlDataSource - Giáo trình lập trình Web
Hình 3.5 Kết hợp dữ liệu với SqlDataSource (Trang 43)
Hình 3.7: Trang hiển thị danh sách kho hàng trên trình duyệt - Giáo trình lập trình Web
Hình 3.7 Trang hiển thị danh sách kho hàng trên trình duyệt (Trang 44)
Hình 3.9: Mô hình dbml - Giáo trình lập trình Web
Hình 3.9 Mô hình dbml (Trang 47)
Hình 3.10: Kết quả thực thi - Giáo trình lập trình Web
Hình 3.10 Kết quả thực thi (Trang 47)
Hình 3.11: Danh sách hàng hóa - Giáo trình lập trình Web
Hình 3.11 Danh sách hàng hóa (Trang 48)
Hình 4.1: Website jQuery.com - Giáo trình lập trình Web
Hình 4.1 Website jQuery.com (Trang 52)
Hình 4.2: Cây thư mục của dự án - Giáo trình lập trình Web
Hình 4.2 Cây thư mục của dự án (Trang 52)
Hình 4.3: Kết quả khi thực hiện chương trình - Giáo trình lập trình Web
Hình 4.3 Kết quả khi thực hiện chương trình (Trang 57)
Hình 5.1: Mô hình MVC cơ bản - Giáo trình lập trình Web
Hình 5.1 Mô hình MVC cơ bản (Trang 62)
Hình 5.2: Tạo ứng dụng MVC - Giáo trình lập trình Web
Hình 5.2 Tạo ứng dụng MVC (Trang 66)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w