Tải bản đầy đủ (.pdf) (23 trang)

Đề tài niên luận Tìm hiểu ASP.NET MVC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.24 MB, 23 trang )

2010
Giáo viên hướng dẫn:
Nguyễn Kim Tuấn
Sinh viên thực hiện:
Hồ Văn Kỳ Long
Lớp : K31D
Đề tài niên luận: Tìm hiểu ASP.NET MVC
TRƯỜNG ĐẠI HỌC KHOA HỌC
KHOA CÔNG NGHỆ THÔNG TIN
Mục lục
PHẦN I: GIỚI THIỆU ASP.NET WEBFORM 2
PHẦN II: ASP.NET MVC 5
PHẦN III: BLOG TIN TỨC 17
PHẦN I: GIỚI THIỆU ASP.NET WEBFORM
1. Quá trình phát triển của ASP.NET #2: ASP 1.0, 1.1, 2.0, 3.0, 3.5, 3.5 SP 1:
 ASP.NET 1.0: 16, tháng 1, 2002
 ASP.NET 1.1: 24, tháng4, 2003
 ASP.NET 2.0: 7, tháng 11, 2005, Visual Studio 2005
- New data controls (GridView, FormView, DetailsView)
- Declarative data access (SqlDataSource, ObjectDataSource,
XmlDataSource controls)
- Navigation controls (Danh mục kiểm soát)
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
2
- Master pages
- Login controls
- Themes
- Skins
- Web parts
- Personalization services
- Full pre-compilation


- New localization technique
- Support for 64-bit processors (Hỗ trợ cho bộ vi xử lý 64-bit)
- Provider class model
 ASP.NET 3.0: 21, tháng 11, 2006 : WCF, CardSpace
 ASP.NET 3.5: 19, tháng 11, 2007, phát hành với VS 2008 :
- LINQ (Language Integrated Query) đem đến khả năng truy vấn dữ liệu
theo cú pháp SQL trực tiếp trong C# hay VB.NET, áp dụng cho tất cả dữ
liệu từ đối tượng đến cơ sở dữ liệu quan hệ và XML.
- New data control (ListView, DataPager). ListView linh hoạt hơn và có
chứa toàn bộ tính năng của Gripview, Datagrip, Repeater trong ASP.NET
2.0. Nó cung cấp các khả năng và chèn xóa, sửa sắp xếp, phân trang.
Chúng ta hoàn toàn định dạng được việc dữ liệu hiển thị trên ListView mà
không cần phải sử dụng thẻ <table>. Các template trong ListView rất
phong phú và đa dạng. Datager cung cấp cho ListView trong việc phân
trang.
- ASP.NET AJAX bao gồm như là một phần của framework. Do đó quá
trình xây dựng giao diện người dùng được dễ dàng và trực quan.
- Hỗ trợ cho HTTP pipelining và cung cấp nguồn cấp dữ liệu.
WCF hỗ trợ cho RSS, JSON, POX and Partial Trust.
 ASP.NET 3.5 SP1: 11, Tháng 8, 2008:
- Dynamic Data cung cấp một Framework cho phép chúng ta nhanh chóng
xây dựng một chức năng ứng dụng driver-data trên Linq to Sql hay entity
Framework. Nó cũng có thêm nhiều tính linh hoạt cho các DetailsView,
GridView trong kiểm tra tính hợp lệ của dữ liệu, hoạt chỉnh lại các mẫu để
thay đổi cách hiển thị dữ liệu.
- Browser history in an ASP.NET AJAX.
- Combine multiple Javascript files into a single file.
- New namespaces System.Web.Abstraction and System.Web.Routing .
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
3

2. ASP.NET WEBFORM là gì ?
• ASP.NET là Active Server pages.NET (NET ở đây là NET framework).
• ASP.NET là một nền tảng ứng dụng web (web application framework) được phát triển và
cung cấp bởi Microsoft.
• ASP.NET đã là 1 bước nhảy vọt khi lần đầu tiên xuất hiện nhằm thu hẹp khoảng cách giữa
phát triển Window Form hướng đối tượng (có trạng thái) và phát triển web hướng HTML
(không có trạng thái).
• Microsoft đã cố gắng che dấu HTTP (không trạng thái) và HTML (vào thời điểm đó không
thân thiện với nhiều developer) bằng cách dùng mô hình giao diện như 1 đối tượng control
có cấu trúc họat động phía server.
• Mỗi control lưu giữ trạng thái qua các request (sử dụng tính năng ViewState), tự động tạo ra
mã HTML khi cần thiết, và tự động kết nối với các sự kiện phía client (ví dụ như click) với
mã hồi đáp phía server. Kết quả WebForm là 1 lớp trừu tượng lớn nhằm chuyển giao diện
có xử lý sự kiện thông qua Web.
3. Nhược điểm của ASP.NET WEBFORM
ViewState: Kĩ thuật lưu giữ trạng thái qua các request (ViewState) thường mang lại
kết quả là những khối dữ liệu lớn được chuyển qua lại giữa client và server. Nó có thể đạt
hàng trăm kilobytes trong nhiều dữ liệu thực, và nó đi qua đi lại với mỗi lần request, làm
những người truy cập vào trang web phải chờ 1 thời gian dài khi họ click 1 button hoặc cố
gắng di chuyển đến trang kế tiếp. ASP.NET bị tình trạng này rất tồi tệ, Ajax là 1 trong các
giải pháp được đưa ra để giải quyết vấn đề này.
Page life cycle: Kĩ thuật kết nối sự kiện phía client với mã xử lý sự kiện phía server
là 1 phần của page life cycle, có thể cực kì rắc rối và mỏng manh. Chỉ có 1 số ít lập trình
viên thành công trong việc xử lý hệ thống control trong thời gian thực mà không bị lỗi
ViewState hoặc hiểu được rằng 1 số trình xử lý sự kiện không được kích họat 1 cách bí
hiểm.
Limited control over HTML: Server control tự tạo ra nó như là mã HTML, nhưng
không phải là mã HTML mà bạn muốn. Ngoài việc mã HTML của chúng thường không
tuân theo tiêu chuẩn web hoặc không sử dụng tốt CSS mà hệ thống các server control còn
tạo ra các giá trị ID phức tạp và không đóan trước được, làm khó khăn trong việc sử dụng

JavaScript.
Ý thức sai về sự tách biệt các thành phần: Mô hình code-behind của ASP.NET
cung cấp 1 giải pháp cho phép ứng dụng đưa mã ra khỏi các dòng HTML vào thành 1 lớp
code–behind riêng biệt. Điều này đã được thể hiện ở việc tách biệt giữa giao diện với mã xử
lý, nhưng thực tế người lập trình được khuyến khích pha trộn mã xử lý giao diện (xử lý
control phía server) với mã xử lý chương trình (xử lý CSDL) trong cùng những lớp code
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
4
behind quá lớn. Nếu không có sự tách biệt rõ ràng giữa các thành phần, kết quả cuối cùng
thường là mỏng manh và khó hiểu.
Untestable: Khi những người thiết kế của ASP.NET lần đầu tiên giới thiệu nền tảng
này, họ có thể đã không lường trước được là việc test tự động sẽ trở thành 1 công đoạn
chính của việc phát triển phần mềm ngày nay. Không quá ngạc nhiên, cấu trúc mà họ đã
thiết kế hòan tòan không thích hợp với việc test tự động.
PHẦN II: ASP.NET MVC
I. Giới thiệu ASP.NET MVC
Những năm 70 của thế kỷ XX, tại phòng thí nghiệm Xerox PARC ở Palo Alto. Sự ra
đời của giao diện đồ họa (Graphical User Interface) và lập trình hướng đối tượng (Object
Oriented Programming) cho phép lập trình viên làm việc với những thành phần đồ họa như
những đối tượng đồ họa có thuộc tính và phương thức riêng của nó. Không dừng lại ở đó,
những nhà nghiên cứu ở Xerox PARC còn đi xa hơn khi cho ra đời cái gọi là kiến trúc
MVC (viết tắt của Model – View – Controller).
Trong kiến trúc MVC, một đối tượng đồ họa (GUI Component) bao gồm 3 thành phần
cơ bản: Model, View và Controller.
Model: có trách nhiệm đối với toàn bộ dữ liệu cũng như trạng thái của đối tượng đồ
họa.
View: thể hiện trực quan của Model, hay nói cách khác chính là giao diện của đối
tượng đồ họa.
Controller: điều khiển việc tương tác giữa đối tượng đồ họa với người sử dụng
cũng như những đối tượng khác.

Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
5
Mục đích chính của MVC là tách rời phần thể hiện và các xử lý bên trong. Trong
nhiều môi trường lập trình hiện đại, nhiều xử lý sự kiện cơ bản đã được hỗ trợ sẵn nên
thành phần Controller không còn quan trọng nữa.
Một ví dụ của kiến trúc MVC là cách hiện thực của 1 đối tượng GUI. Một đối
tượng đồ họa (GUI Component) bao gồm 3 thành phần cơ bản: Model, View, và Controller.
Model có trách nhiệm đối với toàn bộ dữ liệu cũng như trạng thái của đối tượng đồ họa.
View chính là thể hiện trực quan của Model, hay nói cách khác chính là giao diện của đối
tượng đồ họa. Và Controller điều khiển việc tương tác giữa đối tượng đồ họa với người sử
dụng cũng như những đối tượng khác.
Khi người sử dụng hoặc những đối tượng khác cần thay đổi trạng thái của đối tượng
đồ họa, nó sẽ tương tác thông qua Controller của đối tượng đồ họa. Controller sẽ thực hiện
việc thay đổi trên Model. Khi có bất kỳ sự thay đổi nào ở xảy ra ở Model, nó sẽ phát thông
điệp (broadcast message) thông báo cho View và Controller biết. Nhận được thông điệp từ
Model, View sẽ cập nhật lại thể hiện của mình, đảm bảo rằng nó luôn là thể hiện trực quan
chính xác của Model. Còn Controller, khi nhận được thông điệp từ Model, sẽ có những
tương tác cần thiết phản hồi lại người sử dụng hoặc các đối tượng khác.
Lấy ví dụ một GUI Component đơn giản là Checkbox. Checkbox có thành phần
Model để quản lý trạng thái của nó là check hay uncheck, thành phần View để thể hiện nó
với trạng thái tương ứng lên màn hình và thành phần Controller để xử lý những sự kiện khi
có sự tương tác của người sử dụng hoặc các đối tượng khác lên Checkbox. Khi người sử
dụng nhấn chuột vào Checkbox, thành phần Controller của Checkbox sẽ xử lý sự kiện này,
yêu cầu thành phần Model thay đổi dữ liệu trạng thái. Sau khi thay đổi trạng thái, thành
phần Model phát thông điệp đến thành phần View và Controller. Thành phần View của
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
6
Checkbox nhận được thông điệp sẽ cập nhật lại thể hiện của Checkbox, phản ánh chính xác
trạng thái Checkbox do Model lưu giữ. Thành phần Controller nhận được thông điệp do
Model gởi tới sẽ có những tương tác phản hồi với người sử dụng nếu cần thiết.

II. Các điểm cần lưu ý:
1/ MVC dành cho lâp trình giao diện người dùng
2/ MVC tách biệt 3 thao tác chính khi lâp trình giao diện:
+ Xây dựng dữ liệu (sẽ trình bày trên giao diện)
+ Trình bày giao diện với dữ liệu
+ Đáp trả các thao tác của người dùng
3/ Lợi ích của MVC
- Lợi ích duy nhất và quan trọng nhất khi sử dụng MVC là sự rõ nghĩa trong mã nguồn.
III. Các đặc tính của ASP.NET MVC

• Tách rõ ràng các mối liên quan, mở khả năng test TDD (test driven developer). Có thể 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ụ: 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ụ: 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 file ASP.NET như ASPX .ASCX và
.Master, đánh dấu các tập tin này như một “view template” ( 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 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…

IV. Sự khác biệt với WEBFORM:
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
7
 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 events để 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 Framework chia ra thành 3 phần: Models, Views, Controllers. Mọi tương
tác của người dùng với Views sẽ được thực hiện hành động trong Controllers, không còn
postback, không còn lifecycle không còn event.
 Việc kiểm tra ( 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ỳ controls 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.
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 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
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 controls
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 Tốc độ phân tải chậm khi trong
trang có quá nhiều các controls 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 Tương tác với javascript khó khăn vì
các controls đượ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ó
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
8
URL Address Cấu trúc địa chỉ URL có dạng
<filename>.aspx?&<các tham số>
Cấu trúc địa chỉ rành mạch theo dạng
Controllers/Action/Id
V. 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 :File =>
New Project => Windows C# => ASP.NET MVC Web Application
Trong mục Solution Explorer có 3 thư mục mặc định : Model, Views, Controllers chứa các
đối tượng tương ứng với các thành phần Model ,View, Controllers trong mô hình MVC.
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
9
Chạy ứng dụng bằng cách ấn F5. Nếu là ứng dụng mới tạo lần đầu thì sẽ thông báo hỏi cho

phép mở chế độ debug hay không? Nếu đồng ý chọn “ Modify the web.config file to enable
debugging”, không muốn thì chọn without debugging.
Kết quả chạy ứng dụng:
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
10
VI. Tìm hiểu 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 từ phía 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 kết quả cho người
dùng và được thành phần View hiển thị. Tùy theo cách thiết kế lớp mà chúng ta thường
thấy Controller gồm:
+ Front Controller
+ Dispatcher
+ Action Mapping
+ Action Filter
+ Action: lớp xử lý các sự kiện chính, nơi dẫn đến application flow chủ yếu
(Main Event Handler)
+ Response
+ Request: xử lý một phần user input ở mức GET, POST và PUT
+ Session: xử lý một phần user input ở mức SESSION
Khi giao tiếp với Model, Controller sẽ tiến hành 2 cách :
+ Extract dữ liệu hay state
+ Update dữ liệu
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
11
Một controller là một class (C# hay VB class). Ứng dụng ASP.NET MVC Web Application luôn
tồn tại 2 controller là AccountController.cs và HomeController.cs.
Trong HomeController.cs có 2 phương thức là Index() và About(). Hai phương thức này là 2
action trong controller HomeController.cs nó thực hiện khi được gọi bằng địa chỉ /Home/Index
và /Home/About.

VII. Tìm hiểu VIEW:
View hiển thị các thông tin 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. Tất cả các nghiệp vụ logic được thực thi ở Model. Dữ liệu vào từ người dùng sẽ thông
qua View được kiểm tra ở Model trước khi lưu vào cơ sở dữ liệu . Việc truy xuất, xác nhận và lưu
dữ liệu là một phần của Model.
Một View chứa các thẻ HTML và được trả về cho browser. Trong mô hình MVC thì một
view tương ứng với một trang .aspx trong WebForm .
View phải được tạo đúng vị trí đường dẫn. Ví dụ với controller HomeController.cs thì hành
động HomeController.Index() trả về một view nằm ở vị trí đường dẫn \Views\Home\Index.aspx và
HomeController.About() sẽ trả về một view nằm ở vị trí đường dẫn \Views\Home\About.aspx.
View About.aspx:
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
12
Index.aspx
VIII. Tìm hiểu MODEL:
Model được giao nhiệm vụ cung cấp dữ liệu cho cơ sở dữ liệu và lưu trữ dữ liệu vào các kho chứa
dữ liệu. Tất cả các nghiệp vụ logic được thực thi ở Model. Dữ liệu vào từ người dùng sẽ thông qua
View được kiểm tra ở Model trước khi lưu vào cơ sở dữ liệu. Việc truy xuất , xác nhận và lưu trữ
dữ liệu là một phần của Model.
Model có thể là :
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
13
+ Đánh giá tính hợp lệ của dữ liệu.
Ví dụ kiểm tra user input có đúng với rule của hệ thống không (ví dụ user
credentials )
+ Chuyển đổi dữ liệu:
Ví dụ convert định dạng file, chuyển đổi tỉ giá, language translation
+ Đưa ra quyết định về nghiệp vụ:
Ví dụ đưa ra các dữ liệu, lời khuyên tư vấn đầu tư dựa trên user input và các dữ liệu
đang có

+ Thực hiện việc xử lý dữ liệu theo một quy trình (workflows):
Ví dụ controller tiếp nhận yêu cầu xuất kho 300 chiếc ô tô từ kho A từ user. Sau khi
kiểm tra tính chính quy của việc gửi yêu cầu, Controller chuyển yêu cầu này thành lợi gọi
hệ thống để thông báo cho Model. Tuy nhiên việc xuất kho 300 chiếc ô tô cần phải được
thực hiện theo 1 workflow mà chỉ có Model biết. Tạm thời bỏ qua sự xuất hiện của một rule
engine, chúng ta có thể thấy Model thực hiện một số đoạn code có tính thủ tục như:
1) Thông báo với module sales về việc bán được 300 chiếc ô tô và yêu cầu trả lời.
2) Model sales ghi nhận và kiểm tra chính sách hoa hồng và thời điểm hiện tại và
chuyển tiếp yêu cầu đến module Inventory và module Accounting
3) Module Accounting thực hiện việc tính toán, báo giá thanh toán theo USD và
VND với tỉ giá ở thời điểm hiện tại cũng như không quên trừ triết khấu và hoa hồng và gửi
kèm thông báo thanh toán theo theo yêu cầu xuất kho.
4) Module Inventory kiểm tra yêu cầu xuất kho từ Sales và thông báo thanh toán từ
Accounting để xuất kho, và ghi nhận giao dịch bằng cách ghi lại mã số yêu cầu của Sales và
mã số thanh toán của Accounting. Module này tiếp tục kiểm tra số ô tô có trong kho theo
chất lượng và đặc tả yêu cầu rồi trả lời: có được hay không
5) Nếu được, nó sẽ thành lập thông báo xuất kho Cuối cùng Model trả lại trạng
thái xử lý và dữ liệu nếu có.
Trong Solution Explorer click phai chuột vào Models => Add => New Item =>LINQ to SQL
Classes
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
14
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
15
IX. Mô hình dữ liệu LINQ to SQL:
X. Những điểm lưu ý khi cài ASP.NET MVC:
Thành phần Model không cần thiết phải biết đến các View và Controller cụ thể gắn kết với
nó. Khi có thay đổi, Model chỉ việc phát thông điệp cho những ai đăng ký với nó. Điều này có thể
được thực hiện thông qua Observer Pattern.
Nên áp dụng Facade Pattern để kết hợp Model, View, và Controller lại với nhau thành 3

trong 1 cho dễ quản lý và thao tác đối với người sử dụng.
Kiến trúc MVC không phải là kiến trúc 3 tầng (3-Tiers Architecture). Mặc dù giữa 2 kiến
trúc này có nhiều điểm tương đồng nhưng chúng nói về 2 khía cạnh khác nhau.
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
16
PHẦN III: BLOG TIN TỨC
A. Website tin tức:
Là giải pháp tạo lập một trang báo điện tử với khả năng tiếp cận độc giả toàn cầu và liên
tục. Khả năng xuất bản thông tin nhanh chóng và tính cập nhật đa dạng.
Ví dụ:
B. Chức năng:
a. Trang chủ:
Được thiết kế theo bố cục hài hòa, định hướng cung cấp thông tin. Hệ thống cho phép hiển
thị thông tin.
b. Trang giới thiệu
Giới thiệu về chủ quản blog tin tức, xây dựng blog trên nên tảng.
c. Trang liên hệ
Cung cấp thông tin liên hệ của đơn vị chủ quản website và một form liên hệ để người dùng gửi
thông tin phản hồi.
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
17
C. Phân tích bài toán:
a) Sơ đồ ngữ cảnh:
b) Mô hình logic:
c) Mô hình cơ sở dữ liệu:
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
18
d) Thiết kế:
• CategoryController:
- Đoạn code tạo danh mục mới :

Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
19
- Đoạn code Edit danh mục:
- Đoạn code delete Tin tức
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
20
• Homecontroller:
D. Hình ảnh website tin tức:
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
21
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
22
Đề tài thực tập: Tìm hiểu ASP.NET MVC Page
23

×