Trang 1
Tìm hiểu công nghệ ASP.NET MVC
Mục lục
Phần I.
1. Lịch sử phát triển Web
2. Lý do ra đời của ASP.NET MVC
2.1 Giới thiệu ASP.NET truyền thống
2.2 Nhược điểm ASP.NET truyền thống
2.3 Giới thiệu ASP.NET MVC (model-view-controller)
2.3.1 Nguồn gốc ASP.NET MVC
2.3.2 Các thành phần cấu thành ASP.NET MVC
2.3.3 Cấu trúc mặc định của một dự án ASP.NET MVC
2.4 So sánh giữa ASP.NET và ASP.NET MVC
2.5 MVC2
3. Tìm hiểu các thành phần bên trong ASP.NET MVC
3.1 Controllers và Actions
3.1.1 Controllers là gì ?
3.1.2 Controller Actions là gì ?
3.2 Views
3.2.1 Views là gì ?
3.2.2 Tạo Views như thế nào ?
3.2.2 Sử dụng Views như thế nào ?
3.3 Models
3.3.1 Models là gì ?
3.3.2 Tạo Database
Trang 2
3.3.3 Tạo Data Model với Microsoft Entity Framework
3.3.4 Sử dụng Linq to Sql trong ASP.NET MVC
1.5 URLs và Routing
CGI
Đơn giản (lựa chọn duy
nhất vào thời điểm này)
Chạy bên ngoài web
server
Bronze age
IDC (Microsoft Internet
database connector)
Chạy bên trong server
Chì là đóng gói những
câu truy vấn SQL và
template cho các kết
quả có định dạng.
1996
ASP (Active Server
Page)
Mục đích chung
Thông dịch thời gian
thực
2002/ 2003
ASP.NET 1.0/1.1
- Giao diện có
trạng thái
- Đã được biên
dịch
- khuyến khích
lập trình hướng đối
tượng.
- Cấu trúc file lớn
- Chiếm nhiều
client và server, điều này có thể trở nên phức tạp, và dễ phá vỡ.
- Các control bị giới hạn trên mã HTML: vài control server sinh mã HTML,
nhưng đó không phải là mã HTML mà ta mong muốn. Ví dụ vài control servers sinh ra giá trị ID
phức tạp, và khó truy xuất bởi JavaScript.
- Cảm nhận sai trong việc phân tách code ra khỏi mã HTML bằng cách tạo code-
behind bên dưới trang: Trong thực tế thì các nhà phát triển Web đã khuyến khích nên trộn việc
trình bày code (ví dụ: việc quản lý control phía server) với tính logic trong ứng dụng của họ (ví
dụ: thao tác cơ sở dữ liệu) với nhau. Tốt hơn hết là không nên tách riêng chúng ra vì kết quả
thường là khó hiểu và dễ vỡ.
- Không thể kiểm thử: Khi lần đầu tiên các nhà thiết kế ASP.NET đưa ra nền thiết
kế của họ, họ không thể lường trước việc kiểm thử sẽ trở thành xu hướng phát triển phần mềm
hiện nay. Và kiến trúc họ đã xây dựng thì hoàn toàn không phù hợp cho việc kiểm thử tự động.
* Và phiên bản ASP.NET 2.0 đã thêm vào một số components chuẩn nhằm giảm
sinh ra số lượng code bạn không mong muốn (bạn cần viết chúng). Và năm 2007, Microsoft cho
ra đời Web 2.0/Ajax, hỗ trợ nhiều hơn trong việc tương tác với client. Và phiên bản mới nhất cùa
ASP.NET là phiên bản 3.5 với một số tính năng mới được thêm vào như tích hợp một số controls
mới, ASP.NET dynamic data giúp việc tạo ra database tự động đơn giản hơn như (liệt kê, sửa, …
các mẫu tin trong database). Xa hơn nữa trong Visual Studio 2010 ASP.NET 4.0 sẽ cho các nhà
phát triển web tùy chọn các thành phần ID của HTML, nhằm giảm rắc rối về các giá trị ID phức
tạp và khó dự đoán trước.
2.3 Giới thiệu ASP.NET MVC : ASP.NET MVC là nền tảng công nghệ mới
nhất của Microsoft hiện nay là ASP.NET MVC, nó được thiết kế từ suy nghĩ là làm thế
nào để xây dựng một phần mềm tốt (phần mềm tốt là phần mềm bạn muốn tạo ra và nó
dễ dàng được thay đổi - Stephen Walther). ASP.NET MVC được thiết kế để làm sao có
thể bổ sung các nguyên lý và các patterns phát triển phần mềm khi xây dựng các ứng
dụng web. Bên cạnh đó, nó được thiết kế để hổ trợ trong việc kiểm thử.
2.3.1 Nguồn gốc ASP.NET MVC:
* ASP.NET MVC 1.0
- Công nghệ ASP.NET MVC là mới, tuy nhiên nó có lịch sử
lâu đời. Nền tảng MVC được phát minh bởi Trygve Renskaug, ông đã viết
Hình 2.1: Mô hình MVC (kí hiệu: tương tác với) *
Lợi ích của ứng dụng web dựa trên mô hình MVC:
- Có tính mở rộng do có thể thay thế từng thành phần một cách dễ dàng
- Không sử dụng viewstate, điều này làm các nhà phát triển dễ dàng điều
khiển ứng dụng của mình.
- Hệ thống định tuyến mới mạnh mẽ
- Hỗ trợ tốt hơn cho test-driven development (TDD) cài đặt các unit tests
tự động, xác định và kiểm tra lại các yêu cầu trước khi bắt tay vào viết
code.
- Hỗ trợ kết hợp rất tốt giữa người lập trình và người thiết kế giao diện.
- Sử dụng các tính năng tốt nhất đã có của ASP.NET.
* Nhược điểm của ASP.NET MVC
- Không hướng đến sự kiện làm cho các nhà phát triển
ASP.NET webform khó khăn.
- Yêu cầu hiểu biết về HTTP, HTML, CSS và JavaScript.
- Thư viện của nhà phân phối thứ ba không mạnh bằng.
2.3.3 Cấu trúc mặc định của một dự án ASP.NET MVC: các bước tạo 1 project
mặc định bằng ASP.NET MVC như sau:
- Khởi động visual studio 2008, chọn File -> New -> Project ->
ASP.NET MVC
Web Application
Trang 7
Trang 6
Hình 2.2: Tạo mới dự án ASP.NET MVC
Hình 2.3: Tạo bộ test dự án
không hoàn toàn thay thế cho có ứng dụng ASP.NET Web Forms, và việc chọn hướng
nào để xây dựng một website là tùy thuộc vào các nhà phát triển.
2.4
So sánh giữa ASP.NET
webform
và ASP.NET MVC
Trang 10
* Sự khác biệt của ASP.NET MVC với ASP.NET 2.0
Tính năng
ASP.NET 2.0
ASP.NET MVC
Kiến trúc chương trình
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
Cú pháp chương trình
Sử dụng cú pháp của
webform, tất các sự kiện và
controls do server quản lý.
Các sự kiện được điều khiển
bởi controllers, các controls
không do server quản lý.
Truy cập dữ liệu
Sử dụng hầu hết các công
nghệ truy cập dữ liệu trong
ứng dụng.
mạch theo dạng
Controllers/Action/Id
2.5 ASP.NET MVC 2
Trang 11
- ASP.NET MVC 2 chỉ có thể chạy trên nền asp.net 3.5 sp1 và
asp.net 4. Chúng ta chỉ có thể triển khai asp.net mvc 2 trên visual studio 2010
hoặc visual studio 2008 sp1.
Được hổ trợ bởi các hệ điều hành như: Windows 7; Windows Server 2003; Windows
Server 2008; Windows Vista
- Các đặc tính mới trong asp.net MVC 2:
+ New Strongly Typed HTML Helpers: Hỗ trợ diễn đạt lambda (lambda
Ví dụ:
expression) tham chiếu đến một mảng hay tập hợp nào đó.
Trang 12
Ngoài ra, ASP.NET MVC2 còn hỗ trợ thêm một số strongly-typed HTML như bên
dưới:
+ Overriding the HTTP Method Verb: HTTP verbs cho phép ta quyết định
+ Enhanced Model Validation support both server and client thông qua bộ
liệu action (GET, POST, PUT, DELETE) nào sẽ được thực thi
.
Trang 13
thư viện javascript được tích hợp sẵn trong ASP.NET MVC 2
+ Auto-Scaffold UI Helpers with template customization: You can ensure
Tuy nhiên, validation rules ở trên mới chỉ thực hiện ở phía server, khi đó, để bắt
được validation rules thì đòi hỏi người dùng phải nhấn nút submit. Nhưng ASP.NET
MVC 2 đã xây dựng kiến trúc validation rules rất tuyệt vời bao gồm cả việc hỗ trợ
validation rules cả phía server lẫn client. Tất cả những gì chúng ta cần làm là thêm hai
Chạy thử và thu kết quả
+
Bước 4: Chạy và kiểm tra kết quả
tham chiếu javascrip là
Trang 17
Ngoài ra, ASP.NET MVC còn cho phép ta tự tạo các thuộc tính Validation, ví dụ,
chúng ta muốn xây dựng validation rule cho thuộc tính Email, đơn giản, ta chỉ cần kế
thừa từ lớp RegularExpressionAttribute
Và cách sử dụng thì giống như ví dụ đã làm trước đó
Nói tóm lại, ASP.NET MVC 2 đã bổ sung rất nhiều đặc tính mới, nếu có nhu cầu
tìm hiểu thêm, chúng ta có thể tham khảo tại website:
http://www.asp.net/learn/whitepapers/what-is-new-in-aspnet-mvc.
2.6 ASP.NET MVC 3
- ASP.Net MVC 3 chỉ có thể chạy trên nền asp.net 4, chúng ta chỉ có thể triển khai
asp.net mvc 3 trên visual studio 2010. Để tìm hiểu thêm về kế hoạch ra đời ASP.NET
MVC 3 cùng các đặc tính mới mà nó có thể hổ trợ, chúng ta có thể tham khảo tại website:
http://aspnet.codeplex.com/wikipage?title=Road %20Map&referringTitle=MVC.
3. Tìm hiểu các thành phần bên trong ASP.NET MVC
3.1 Controllers và Actions
3.1.1 Controllers là gì ?
- Controllers đảm nhận việc xử lý logic ở phía ứng dụng bao gồm việc
nhận giá trị đầu vào của ứng dụng, phát sinh các lệnh thực thi, nhận dữ liệu từ miền model, và
RedirectToRoute()
RedirectToRouteResult: miêu tả chuyển hướng hoạt động đến controller action
hoặc URL sử dụng cùng giá trị định tuyến (route )
RedirectToAction()
Trả về một RedirectToRouteResult
Một số ví dụ:
Hình 3.3: code trả về một ViewResult
Hình 3.4: code trả về một RedirectResult
c. Trả về một ContentResult
a. Trả về một ViewResult
b. Trả về một Redirect Result
Trang 20
Hình 3.5: code trả về một ContentResult Hình 3.7: Kết quả chạy thử code ContentResult * Như vậy, qua cách
ví dụ trên ta biết được cách hoạt động của controller nhưng
d.
Trả về một fileResult
Hình 3.6: code trả về một ContentResult
Trang 21
làm thế nào cotroller nhận biết hai hàm cùng tên, gọi action nào hoạt động khi thao tác form dữ
liệu, hoặc yêu cầu các phương thức đặc biệt khi một nhận request từ Ajax
a. sử dụng AcceptVerbs: Thuộc tính AcceptVerbs ngăn chặn một action
được yêu cầu mà không có thao tác HTTP Post hoặc Get. Ví dụ
*Ngoại lệ điều khiển các action không tồn tại (handling unknown action):
Khi
một
action nào đó được khai báo trong controller, trong khi đó action này không thực thi được khi đó
nó phát sinh lỗi 404 Resource Not Found HTTP. Tuy nhiên, chúng ta có thể xử lý
Hình 3.14
Hình 3.15
3.2 Views
3.2.1 Views là gì ? View trong ứng dụng ASP.NET MVC được xem là giao diện
của ứng dụng, View có tác dụng trả về cho trình duyệt trang HTML khi người dùng ghé thăm
website của chúng ta. Views chứa các tag tương tự như HTML, chúng ta có thể đặt mọi thứ vào
trong view như hình ảnh, iframes, java applets, flash và silverlight.
3.2.2 Tạo Views như thế nào ? Cách tạo view dễ nhất là nhấp chuột phải vào
lỗi này bằng cách ghi đè phương thức HandleUnknownAction()
Hình 3.12
Trang 24
action nào đó trong controller chọn Add View
Hình 3.16 Thêm một view mơi tứ controller action
Hình 3.17 Sử dụng hợp thoại View (View Dialog)
Hình 3.18 Nội dung cơ bản của một view
- Trong view frmDangKi.aspx chúng ta vừa tạo chứa 2 tag <asp:content>,
Trang 25
tag <asp:content> đầu tiên sẽ xuất hiện trong tag <title> của văn bản HTML, tag <asp:content>
thứ hai sẽ xuất hiện trong tag <body> của văn bản HTML.