SlideShare a Scribd company logo
1 of 22
Download to read offline
Bài số 3 
Tổng quan về ASP.NET MVC Framework 
Table of Contents 
1 Tại sao sử dụng ASP.NET MVC ............................................................................................ 2 
1.1 ASP.NET MVC là gì ................................................................................................................. 2 
1.1.1 Mô hình MVC cơ bản .................................................................................................... 2 
1.1.2 Một vài đặc tính trong ASP.NET MVC ........................................................................... 2 
1.2 Sự khác biệt với WebForm ..................................................................................................... 3 
2 Ví dụ xây dựng ứng dụng với ASP.NET MVC Framework ................................................ 4 
2.1 Tạo Project với ASP.NET MVC Web Application ........................................................................ 4 
2.2 Tìm hiểu định tuyến URL ............................................................................................................ 8 
2.3 Xây dựng mô hình dữ liệu .......................................................................................................... 9 
2.3.1 Tạo cơ sở dữ liệu .......................................................................................................... 9 
2.3.2 Sử dụng mô hình LINQ to SQL ..................................................................................... 10 
2.4 Tìm hiểu về Controllers ............................................................................................................ 14 
2.5 Tìm hiểu về Views ..................................................................................................................... 16 
2.6 Tìm hiểu về Models .................................................................................................................. 18 
2.7 Cấu trúc ViewsSharedSite.Master ......................................................................................... 20 
2.8 Kết quả ...................................................................................................................................... 21 
3 Câu hỏi ôn tập ....................................................................................................................... 21 
4 Tài liệu tham khảo ................................................................................................................ 22
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 2 
1 Tại sao sử dụng ASP.NET MVC 
1.1 ASP.NET MVC là gì 
1.1.1 Mô hình MVC cơ bản 
MVC viết tắt của các chữ cái đầu của Models, Views, Controllers. 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. 
Figure 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 sạch sẽ giúp cho việc kiểm tra lỗi ứng dụng trở nên dễ dàng hơn. 
1.1.2 Một vài đặ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). 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ẽ
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 3 
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… 1.2 Sự khác biệt với WebForm 
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 events. 
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ó 
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
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 4 
2 Ví dụ xây dựng ứng dụng với ASP.NET MVC Framework 
Tính năng ASP.NET MVC Framework hiện giờ mới là bản Beta trong .NET Framework 3.5. Để xây dựng ứng dụng với ASP.NET MVC Framework cần có môi trường hoạt động .NET Framework 3.5 ( cụ thể chương trình sau sẽ xây dựng với Visual Studio 2008 ), tiếp theo cần một MVC Framework. Mặc định trong Visual Studio 2008 chưa có sẵn ASP.NET MVC Web Applications. Có thể download ASP.NET MVC Framework tại địa chỉ http://www.microsoft.com/downloads/details.aspx?FamilyId=A24D1E00-CD35-4F66-BAA0- 2362BDDE0766&displaylang=en. Cài đặt Visual Studio 2008 sau đó cài đặt ASP.NET MVC Framework. Bây giờ có thể bắt đầu xây dựng ứng dụng với MVC. 2.1 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 ( xem Figure 2). 
Figure 2. Tạo một Projects ASP.NET MVC 
Khi tạo một ASP.NET MVC Framework thì một hộp thoại Unit Test xuất hiện. Chọn Yes nếu muốn tạo một Project Test, chọn No nếu không muốn tạo một Unit Test. ( xem Figure 3)
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 5 
Figure 3. Tạo Unit Test cho ASP.NET MVC 
Sau khi một ứng dụng ASP.NET MVC Web Application được tạo, 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. 
Mở rộng folder Controllers sẽ thấy HomeController.cs, mở rộng Views sẽ thấy folder Home, Shared và Account. Mở rộng folder Home sẽ thấy About.aspx và Index.aspx ( xem hình Figure 4 )
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 6 
Figure 4. Solution Explorer MVC 
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ẽ có thông báo hỏi có cho phép mở chế độ Debug hay không? Nếu đồng ý chọn “Modify the Web.config file to enable debugging”, ko muốn debug chọn “Run without debugging”. ( xem Figure 5).
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 7 
Figure 5. Mở Debug trong Web.config ASP.NET MVC 
Kết quả khi chạy ứng dụng ( xem Figure 6) là ứng dụng được load vào browser. Trong ví dụ này chỉ có 2 trang là Index và About.
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 8 
Figure 6. Thực thi ứng dụng mẫu ASP.NET MVC 2.2 Tìm hiểu định tuyến URL 
Browser 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 request 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 file Global.asax using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace HiTest { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } } } 
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 request 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 
Controller mặc định sẽ là HomeController, Action mặc định là Index, Id mặc định là “”  http://localhost:1727/ 
Ví dụ: với địa chỉ /Employee:
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 9 
Controller = EmployeeController Action = Index Id = “” 2.3 Xây dựng mô hình dữ liệu 
2.3.1 Tạo cơ sở dữ liệu Từ App_Data click phải chuột chọn Add  New Item  SQL Server Database đặt tên Database.mdf Figure 7. Tạo cơ sở dữ liệu Database.mdf trong App_Data Trong cơ sở dữ liệu Database.mdf tạo 2 table: ( xem Figure 8, Figure 9 )
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 10 
Figure 8. Bảng SanPham trong cơ sở dữ liệu Database.mdf Figure 9. Bảng LoaiSanPham trong cơ sở dữ liệu Database.mdf 
2.3.2 Sử dụng mô hình LINQ to SQL Trong Solution Explorer click phải chuột vảo Models  Add  New Item LINQ to SQL Classes (Figure 10)
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 11 
Figure 10. Tạo LINQ to SQL Classes
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 12 
Từ Server Explorer  Kéo thả 2 tables LoaiSanPham, SanPham vào file DataClasses.dbml Figure 10. Tạo file DataClasses.dbml sử dụng 2 bảng LoaiSanPham và SanPham Trong file DataClasses.dbml click phải chuột chọn Add  Association để tạo liên kết giữa 2 table. (Figure 11)
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 13 
Figure 11. Tạo liên kết giữa các bảng trong DataClasses.dbml Kết quả được như Figure 12 dướ i đây. Figure 12. Cấu trú c của DataClasses.dbml
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 14 
2.4 Tìm hiểu về Controllers 
Controller chịu trách nhiệm điều khiển các tương tác của người dùng bên trong ứng dụng MVC. Controller sẽ quyết định cái gì được trả về cho người dùng khi người dùng tạo ra một request trên browser. 
Một controller là một class ( C# class hoặc VB class). Trong ví dụ ứng dụng ASP.NET MVC Web Application mẫu luôn tồn tại 2 controller là AccountController.cs và HomeController.cs nằm trong folder Controllers 
HomeController.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Mvc.Ajax; namespace HiTest.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Title"] = "Home Page"; ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } public ActionResult About() { ViewData["Title"] = "About Page"; return View(); } } } 
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. Bất kỳ phương thức nào có thuộc tính public đều là một action trong controller. 
Tạo một Controller mới 
Trong folder Controllers  phải chuột chọn Add  New Item  MVC Controller Class ( Figure 13)
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 15 
Figure 13. Tạo controller tên là SanPhamController.cs 
SanPhamController.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Mvc.Ajax; using BanHang.Models; namespace BanHang.Controllers { public class SanPhamController : Controller { DataClassesDataContext data = new DataClassesDataContext(); public ActionResult Index() { // Add action logic here ViewData["Title"] = "Sản phẩm"; return RedirectToAction("DanhMucLoaiSanPham"); } public ActionResult DanhMucLoaiSanPham() { // Code cua ban o day ViewData["Title"] = "Danh mục loại sản phẩm"; List<LoaiSanPham> lsp = data.LoaiSanPhams.ToList(); return View("DanhMucLoaiSanPham", lsp); } public ActionResult DanhSachSanPham(string loaisanpham) { ViewData["Title"] = "Danh sách sản phẩm trong loại sản phẩm";
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 16 
List<SanPham> sp = data.LaySanPhamTuLoaiSanPham(loaisanpham); return View("DanhSachSanPham", sp); } public ActionResult ChiTietSanPham(int id) { ViewData["Title"] = "Chi tiết sản phẩm"; SanPham ctsp = data.LaySanPhamQuaID(id); return View("ChiTietSanPham", ctsp); } } } 2.5 Tìm hiểu về Views 
Trong controller HomeController.cs, cả hai phương thức Index() và About() đều trả về một view. 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 ViewsHomeIndex.aspx và HomeController.About() sẽ trả về một view nằm ở vị trí đường dẫn ViewsHomeAbout.aspx 
View About.aspx <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="HiTest.Views.Home.About" %> <asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server"> <h2>About Us</h2> <p> TODO: Put <em>about</em> content here. </p> </asp:Content> 
View Index.aspx <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="HiTest.Views.Home.Index" %> <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server"> <h2><%= Html.Encode(ViewData["Message"]) %></h2> <p> To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>. </p> </asp:Content> 
Tất cả các thuộc tính nằm giữa 2 thẻ <asp:Content></asp:Content> đều có định dạng HTML và có thể tùy ý sửa đổi theo ý muốn. 
Tạo view cho controller SanPhamController.cs, trong SanPhamController.cs có 4 phương thứ c public là Index(), DanhMucLoaiSanPham(), DanhSachSanPham() và ChiTietSanPham() nên trong Views phải tạo 4 view tương ứng là Index.aspx, DanhMucLoaiSanPham.aspx, DanhSachSanPham.aspx, ChiTietSanPham.aspx bằng cách từ
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 17 
folder Views click phải chuột chọn Add  New Folder nhập tên folder mớ i tạo là SanPham. Từ folder SanPham click phải chuột chọn Add  View… (Figure 14) (ví dụ tạo view DanhMucLoaiSanPham) 
Figure 14. Tạo view DanhMucLoaiSanPham trong folder SanPham 
Index.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="BanHang.Views.SanPham.Index" %> <asp:Content ID="viewIndex" ContentPlaceHolderID="MainContent" runat="server"> <h1>Đây là trang chính của sản phẩm</h1> </asp:Content> 
DanhMucLoaiSanPham.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="DanhMucLoaiSanPham.aspx.cs" Inherits="BanHang.Views.SanPham.DanhMucLoaiSanPham" %> <asp:Content ID="viewDanhMucLoaiSanPham" ContentPlaceHolderID="MainContent" runat="server"> <h1> Đây là danh mục loại sản phẩm</h1> <% foreach (var lsp in ViewData.Model) { %> <li> <%= Html.ActionLink(lsp.TenLoaiSanPham, "DanhSachSanPham/" + lsp.TenLoaiSanPham, "SanPham") %> </li> <% } %> </asp:Content> 
DanhSachSanPham.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="DanhSachSanPham.aspx.cs" Inherits="BanHang.Views.SanPham.DanhSachSanPham" %> <asp:Content ID="viewDanhSachSanPham" ContentPlaceHolderID="MainContent" runat="server"> <h1>Đây là danh sách sản phẩm có trong chuyên mục</h1> </asp:Content> 
ChiTietSanPham.aspx
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 18 
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="ChiTietSanPham.aspx.cs" Inherits="BanHang.Views.SanPham.ChiTietSanPham" %> <asp:Content ID="viewChiTietSanPham" ContentPlaceHolderID="MainContent" runat="server"> <h1>Đây là Chi tiết sản phẩm</h1> </asp:Content> 2.6 Tìm hiểu về Models 
Một model trong ứng dụng ASP.NET 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 ( file định dạng dbml ) trong folder Models. 
Mô hình dữ liệu LINQ to SQL ( Figure 15 ) 
Figure 15. Mô hình dữ liệu LINQ to SQL 
Xây dựng lớp trợ giúp cho việc thao tác với dữ liệu thông qua LINQ to SQL 
DataClasses.cs using System; using System.Collections.Generic; using System.Linq; namespace BanHang.Models {
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 19 
partial class DataClassesDataContext { public List<LoaiSanPham> LayCacLoaiSanPham() { return LoaiSanPhams.ToList(); } public List<SanPham> LaySanPhamTuLoaiSanPham(string loaisanpham) { return SanPhams.Where(l => l.LoaiSanPham1.Id == loaisanpham).ToList(); } public SanPham LaySanPhamQuaID(int id) { return SanPhams.Single(s => s.Id == id); } } } 
Vớ i lớ p trợ giú p có thể thao tác dễ dàng hơn vớ i cơ sở dữ liệu khi cần. Chẳng hạn vớ i lớ p DataClasses.cs ở trên khi cần truy nhập để lấy thông tin về sản phẩm có mã Id, có thể viết như sau trong bất kỳ một code-behind nào của Views (ví dụ với view DanhMucLoaiSanPham.aspx.cs trong folder Views): 
Figure 16. Binding data và o trong ViewsDanhMucLoaiSanPham.aspx.cs 
Khi đó ta phải sử a đổi lại file ViewsDanhMucLoaiSanPham.aspx cho phù hợp vớ i code trên <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="DanhMucLoaiSanPham.aspx.cs" Inherits="BanHang.Views.SanPham.DanhMucLoaiSanPham" %> <asp:Content ID="viewDanhMucLoaiSanPham" ContentPlaceHolderID="MainContent" runat="server">
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 20 
<h1> Đây là danh mục loại sản phẩm</h1> <asp:ListView ID="listLoaiSanPham" runat="server"> <LayoutTemplate> <ul> <asp:PlaceHolder ID="itemPlaceHolder" runat="server"></asp:PlaceHolder> </ul> </LayoutTemplate> <ItemTemplate> <li> <%= Html.ActionLink(Eval("TenLoaiSanPham"), "DanhSachSanPham/" + Eval("TenLoaiSanPham"), "SanPham") %> </li> </ItemTemplate> </asp:ListView> </asp:Content> 
Views chỉ chứa tất cả những gì hiển thị cho người dùng trên browser, Controllers chỉ chứa các logic mà trả về view nào cho người dùng hoặc hướng từ action này đến action khác. Còn lại tất cả đều được viết trong Models. 2.7 Cấu trúc ViewsSharedSite.Master <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="BanHang.Views.Shared.Site" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title><%= Html.Encode(ViewData["Title"]) %></title> <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="page"> <div id="header"> <div id="title"> <h1>My Sample MVC Application</h1> </div> <div id="logindisplay"> <% Html.RenderPartial("LoginUserControl"); %> </div> <div id="menucontainer"> <ul id="menu"> <li><%= Html.ActionLink("Home", "Index", "Home")%></li> <li><%= Html.ActionLink("SanPham", "Index", "SanPham")%></li> <li><%= Html.ActionLink("About Us", "About", "Home")%></li> </ul> </div> </div> <div id="main"> <asp:ContentPlaceHolder ID="MainContent" runat="server" />
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 21 
<div id="footer"> My Sample MVC Application &copy; Copyright 2008 </div> </div> </div> </body> </html> 2.8 Kết quả 
Figure 17. Kết quả chạy ứ ng dụng khi thêm SanPham vảo ứ ng dụng ASP.NET MVC 3 Câu hỏi ôn tập 
Hỏi: Views của MVC có thể sử dụng AJAX, javascript không? 
Đáp: Được. Về bản chất, view trong ASP.NET MVC Framework cũng là một trang .aspx như với mô hình WebForm vì thế có thể thực hiện các tác vụ tương tự. Vì thế việc sử dụng jQuery, ASP.NET AJAX, và javascript đều có thể thực hiện được. 
Hỏi: 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ũ? 
Đáp: Chưa hẳn là thế. Nếu xây dựng trang web với nền tảng WebForm mà sử dụng ít các controls, usercontrols hoặc ít events thì giá trị ViewState và PostBack không lớn nên sự thực thi không hẳn đã chậm. Trang web xây dựng theo nền WebForm chỉ thực hiện chậm khi giá trị của ViewState là quá lớn. 
Hỏi: 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.
Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 22 
4 Tài liệu tham khảo 
http://www.asp.net/ 
http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx

More Related Content

What's hot

Spring mvc
Spring mvcSpring mvc
Spring mvcBa Big
 
Nunit framework for .NET application
Nunit framework for .NET applicationNunit framework for .NET application
Nunit framework for .NET applicationMinh Tri Lam
 
MVC
MVCMVC
MVCtkot
 
Mixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMinh Tri Lam
 
01 chuong01tongquanveasp netmvc5
01 chuong01tongquanveasp netmvc501 chuong01tongquanveasp netmvc5
01 chuong01tongquanveasp netmvc5Thanh Nguyen
 
So sánh asp.net và mvc
So sánh asp.net và mvcSo sánh asp.net và mvc
So sánh asp.net và mvcNguyen Van Hung
 
Tổng quan về struts framework, mvc
Tổng quan về struts framework, mvc  Tổng quan về struts framework, mvc
Tổng quan về struts framework, mvc truong nguyen
 
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợpSức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợpTuyet Tam
 
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vnNguyen Van Hung
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Minh Tri Lam
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpngohanty13
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Minh Tri Lam
 
1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+ke1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+keLinh Hoang
 
Joomla CMS framework (1.6 - Old version)
Joomla CMS framework (1.6 - Old version) Joomla CMS framework (1.6 - Old version)
Joomla CMS framework (1.6 - Old version) Minh Tri Lam
 
Jdeveloper12c
Jdeveloper12cJdeveloper12c
Jdeveloper12cle larry
 

What's hot (19)

Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Nunit framework for .NET application
Nunit framework for .NET applicationNunit framework for .NET application
Nunit framework for .NET application
 
MVC
MVCMVC
MVC
 
Mixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid project
 
01 chuong01tongquanveasp netmvc5
01 chuong01tongquanveasp netmvc501 chuong01tongquanveasp netmvc5
01 chuong01tongquanveasp netmvc5
 
So sánh asp.net và mvc
So sánh asp.net và mvcSo sánh asp.net và mvc
So sánh asp.net và mvc
 
Tổng quan về struts framework, mvc
Tổng quan về struts framework, mvc  Tổng quan về struts framework, mvc
Tổng quan về struts framework, mvc
 
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợpSức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
 
Java fx
Java fxJava fx
Java fx
 
Thuyet trinh java fx
Thuyet trinh java fxThuyet trinh java fx
Thuyet trinh java fx
 
Jsf
JsfJsf
Jsf
 
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
 
5.spring.net
5.spring.net5.spring.net
5.spring.net
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharp
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
 
1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+ke1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+ke
 
Joomla CMS framework (1.6 - Old version)
Joomla CMS framework (1.6 - Old version) Joomla CMS framework (1.6 - Old version)
Joomla CMS framework (1.6 - Old version)
 
Jdeveloper12c
Jdeveloper12cJdeveloper12c
Jdeveloper12c
 

Viewers also liked

Viewers also liked (20)

Asp.net 3.5 _8
Asp.net 3.5 _8Asp.net 3.5 _8
Asp.net 3.5 _8
 
Huong dan ky dien tu offline
Huong dan ky dien tu offlineHuong dan ky dien tu offline
Huong dan ky dien tu offline
 
Asp.net 3.5 _1
Asp.net 3.5 _1Asp.net 3.5 _1
Asp.net 3.5 _1
 
Asp.net 3.5 _7
Asp.net 3.5 _7Asp.net 3.5 _7
Asp.net 3.5 _7
 
Bg access
Bg accessBg access
Bg access
 
Aspnet 3.5 _02
Aspnet 3.5 _02Aspnet 3.5 _02
Aspnet 3.5 _02
 
Gt pttk he_thong_thong_tin
Gt pttk he_thong_thong_tinGt pttk he_thong_thong_tin
Gt pttk he_thong_thong_tin
 
Giaotrinh access 2010_full_3531
Giaotrinh access 2010_full_3531Giaotrinh access 2010_full_3531
Giaotrinh access 2010_full_3531
 
Cosodulieu
CosodulieuCosodulieu
Cosodulieu
 
Aspnet 3.5 _05
Aspnet 3.5 _05Aspnet 3.5 _05
Aspnet 3.5 _05
 
Kynangtinhoc
KynangtinhocKynangtinhoc
Kynangtinhoc
 
Access
AccessAccess
Access
 
Co so du lieu
Co so du lieuCo so du lieu
Co so du lieu
 
Aspnet 3.5 _04
Aspnet 3.5 _04Aspnet 3.5 _04
Aspnet 3.5 _04
 
Bảng tham chiếu quy đổi một số chứng chỉ ngoại ngữ
Bảng tham chiếu quy đổi một số chứng chỉ ngoại ngữBảng tham chiếu quy đổi một số chứng chỉ ngoại ngữ
Bảng tham chiếu quy đổi một số chứng chỉ ngoại ngữ
 
HTML (Tai lieu Nhat Nghe)
HTML (Tai lieu Nhat Nghe)HTML (Tai lieu Nhat Nghe)
HTML (Tai lieu Nhat Nghe)
 
Làm game animation bằng HTML5/CSS3
Làm game animation bằng HTML5/CSS3Làm game animation bằng HTML5/CSS3
Làm game animation bằng HTML5/CSS3
 
Powerpoint
PowerpointPowerpoint
Powerpoint
 
Ve hinh minh hoa bang word
Ve hinh minh hoa bang wordVe hinh minh hoa bang word
Ve hinh minh hoa bang word
 
ASP.NET OverView
ASP.NET OverViewASP.NET OverView
ASP.NET OverView
 

Similar to Aspnet 3.5_03

Lập trình web asp.net MVC
Lập trình web asp.net MVCLập trình web asp.net MVC
Lập trình web asp.net MVCMasterCode.vn
 
Devexpress cho asp.net
Devexpress cho asp.netDevexpress cho asp.net
Devexpress cho asp.netthichxoidau
 
429157477-Slide-Bao-Cao.pdf
429157477-Slide-Bao-Cao.pdf429157477-Slide-Bao-Cao.pdf
429157477-Slide-Bao-Cao.pdfToNguyen16
 
01-Introduction.pdf
01-Introduction.pdf01-Introduction.pdf
01-Introduction.pdfBird Web
 
Asp net mvc3 music store egroups vn
Asp net mvc3 music store   egroups vnAsp net mvc3 music store   egroups vn
Asp net mvc3 music store egroups vnNguyen Van Hung
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLmTrn286060
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLmTrn286060
 
(HoaND) giao trinh webservice
(HoaND) giao trinh webservice (HoaND) giao trinh webservice
(HoaND) giao trinh webservice Duc Hoa
 
Book storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.comBook storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.comphanleson
 
Quản lý hoạt động giảng dạy sử dụng ASP.NET
Quản lý hoạt động giảng dạy sử dụng ASP.NETQuản lý hoạt động giảng dạy sử dụng ASP.NET
Quản lý hoạt động giảng dạy sử dụng ASP.NETTrung Thành Nguyễn
 
đề thi trắc nghiệm asp net co kem đáp án trên 400 câu hỏi thiết kế website ki...
đề thi trắc nghiệm asp net co kem đáp án trên 400 câu hỏi thiết kế website ki...đề thi trắc nghiệm asp net co kem đáp án trên 400 câu hỏi thiết kế website ki...
đề thi trắc nghiệm asp net co kem đáp án trên 400 câu hỏi thiết kế website ki...anh hieu
 
Thương mại điện tử
Thương  mại điện tửThương  mại điện tử
Thương mại điện tửgacon2009
 
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tậpnnn4194a
 

Similar to Aspnet 3.5_03 (18)

Lập trình web asp.net MVC
Lập trình web asp.net MVCLập trình web asp.net MVC
Lập trình web asp.net MVC
 
Devexpress cho asp.net
Devexpress cho asp.netDevexpress cho asp.net
Devexpress cho asp.net
 
429157477-Slide-Bao-Cao.pdf
429157477-Slide-Bao-Cao.pdf429157477-Slide-Bao-Cao.pdf
429157477-Slide-Bao-Cao.pdf
 
01-Introduction.pdf
01-Introduction.pdf01-Introduction.pdf
01-Introduction.pdf
 
Asp net mvc3 music store egroups vn
Asp net mvc3 music store   egroups vnAsp net mvc3 music store   egroups vn
Asp net mvc3 music store egroups vn
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
 
(HoaND) giao trinh webservice
(HoaND) giao trinh webservice (HoaND) giao trinh webservice
(HoaND) giao trinh webservice
 
Book storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.comBook storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.com
 
Mo hinh-3-lop
Mo hinh-3-lopMo hinh-3-lop
Mo hinh-3-lop
 
Quản lý hoạt động giảng dạy sử dụng ASP.NET
Quản lý hoạt động giảng dạy sử dụng ASP.NETQuản lý hoạt động giảng dạy sử dụng ASP.NET
Quản lý hoạt động giảng dạy sử dụng ASP.NET
 
Asp control
Asp controlAsp control
Asp control
 
Giáo trình asp.net với c sharp
Giáo trình asp.net với c sharpGiáo trình asp.net với c sharp
Giáo trình asp.net với c sharp
 
3250
32503250
3250
 
400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2
400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2
400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2
 
đề thi trắc nghiệm asp net co kem đáp án trên 400 câu hỏi thiết kế website ki...
đề thi trắc nghiệm asp net co kem đáp án trên 400 câu hỏi thiết kế website ki...đề thi trắc nghiệm asp net co kem đáp án trên 400 câu hỏi thiết kế website ki...
đề thi trắc nghiệm asp net co kem đáp án trên 400 câu hỏi thiết kế website ki...
 
Thương mại điện tử
Thương  mại điện tửThương  mại điện tử
Thương mại điện tử
 
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
 

Aspnet 3.5_03

  • 1. Bài số 3 Tổng quan về ASP.NET MVC Framework Table of Contents 1 Tại sao sử dụng ASP.NET MVC ............................................................................................ 2 1.1 ASP.NET MVC là gì ................................................................................................................. 2 1.1.1 Mô hình MVC cơ bản .................................................................................................... 2 1.1.2 Một vài đặc tính trong ASP.NET MVC ........................................................................... 2 1.2 Sự khác biệt với WebForm ..................................................................................................... 3 2 Ví dụ xây dựng ứng dụng với ASP.NET MVC Framework ................................................ 4 2.1 Tạo Project với ASP.NET MVC Web Application ........................................................................ 4 2.2 Tìm hiểu định tuyến URL ............................................................................................................ 8 2.3 Xây dựng mô hình dữ liệu .......................................................................................................... 9 2.3.1 Tạo cơ sở dữ liệu .......................................................................................................... 9 2.3.2 Sử dụng mô hình LINQ to SQL ..................................................................................... 10 2.4 Tìm hiểu về Controllers ............................................................................................................ 14 2.5 Tìm hiểu về Views ..................................................................................................................... 16 2.6 Tìm hiểu về Models .................................................................................................................. 18 2.7 Cấu trúc ViewsSharedSite.Master ......................................................................................... 20 2.8 Kết quả ...................................................................................................................................... 21 3 Câu hỏi ôn tập ....................................................................................................................... 21 4 Tài liệu tham khảo ................................................................................................................ 22
  • 2. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 2 1 Tại sao sử dụng ASP.NET MVC 1.1 ASP.NET MVC là gì 1.1.1 Mô hình MVC cơ bản MVC viết tắt của các chữ cái đầu của Models, Views, Controllers. 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. Figure 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 sạch sẽ giúp cho việc kiểm tra lỗi ứng dụng trở nên dễ dàng hơn. 1.1.2 Một vài đặ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). 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ẽ
  • 3. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 3 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… 1.2 Sự khác biệt với WebForm 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 events. 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ó 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
  • 4. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 4 2 Ví dụ xây dựng ứng dụng với ASP.NET MVC Framework Tính năng ASP.NET MVC Framework hiện giờ mới là bản Beta trong .NET Framework 3.5. Để xây dựng ứng dụng với ASP.NET MVC Framework cần có môi trường hoạt động .NET Framework 3.5 ( cụ thể chương trình sau sẽ xây dựng với Visual Studio 2008 ), tiếp theo cần một MVC Framework. Mặc định trong Visual Studio 2008 chưa có sẵn ASP.NET MVC Web Applications. Có thể download ASP.NET MVC Framework tại địa chỉ http://www.microsoft.com/downloads/details.aspx?FamilyId=A24D1E00-CD35-4F66-BAA0- 2362BDDE0766&displaylang=en. Cài đặt Visual Studio 2008 sau đó cài đặt ASP.NET MVC Framework. Bây giờ có thể bắt đầu xây dựng ứng dụng với MVC. 2.1 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 ( xem Figure 2). Figure 2. Tạo một Projects ASP.NET MVC Khi tạo một ASP.NET MVC Framework thì một hộp thoại Unit Test xuất hiện. Chọn Yes nếu muốn tạo một Project Test, chọn No nếu không muốn tạo một Unit Test. ( xem Figure 3)
  • 5. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 5 Figure 3. Tạo Unit Test cho ASP.NET MVC Sau khi một ứng dụng ASP.NET MVC Web Application được tạo, 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. Mở rộng folder Controllers sẽ thấy HomeController.cs, mở rộng Views sẽ thấy folder Home, Shared và Account. Mở rộng folder Home sẽ thấy About.aspx và Index.aspx ( xem hình Figure 4 )
  • 6. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 6 Figure 4. Solution Explorer MVC 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ẽ có thông báo hỏi có cho phép mở chế độ Debug hay không? Nếu đồng ý chọn “Modify the Web.config file to enable debugging”, ko muốn debug chọn “Run without debugging”. ( xem Figure 5).
  • 7. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 7 Figure 5. Mở Debug trong Web.config ASP.NET MVC Kết quả khi chạy ứng dụng ( xem Figure 6) là ứng dụng được load vào browser. Trong ví dụ này chỉ có 2 trang là Index và About.
  • 8. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 8 Figure 6. Thực thi ứng dụng mẫu ASP.NET MVC 2.2 Tìm hiểu định tuyến URL Browser 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 request 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 file Global.asax using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace HiTest { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } } } 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 request 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 Controller mặc định sẽ là HomeController, Action mặc định là Index, Id mặc định là “”  http://localhost:1727/ Ví dụ: với địa chỉ /Employee:
  • 9. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 9 Controller = EmployeeController Action = Index Id = “” 2.3 Xây dựng mô hình dữ liệu 2.3.1 Tạo cơ sở dữ liệu Từ App_Data click phải chuột chọn Add  New Item  SQL Server Database đặt tên Database.mdf Figure 7. Tạo cơ sở dữ liệu Database.mdf trong App_Data Trong cơ sở dữ liệu Database.mdf tạo 2 table: ( xem Figure 8, Figure 9 )
  • 10. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 10 Figure 8. Bảng SanPham trong cơ sở dữ liệu Database.mdf Figure 9. Bảng LoaiSanPham trong cơ sở dữ liệu Database.mdf 2.3.2 Sử dụng mô hình LINQ to SQL Trong Solution Explorer click phải chuột vảo Models  Add  New Item LINQ to SQL Classes (Figure 10)
  • 11. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 11 Figure 10. Tạo LINQ to SQL Classes
  • 12. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 12 Từ Server Explorer  Kéo thả 2 tables LoaiSanPham, SanPham vào file DataClasses.dbml Figure 10. Tạo file DataClasses.dbml sử dụng 2 bảng LoaiSanPham và SanPham Trong file DataClasses.dbml click phải chuột chọn Add  Association để tạo liên kết giữa 2 table. (Figure 11)
  • 13. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 13 Figure 11. Tạo liên kết giữa các bảng trong DataClasses.dbml Kết quả được như Figure 12 dướ i đây. Figure 12. Cấu trú c của DataClasses.dbml
  • 14. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 14 2.4 Tìm hiểu về Controllers Controller chịu trách nhiệm điều khiển các tương tác của người dùng bên trong ứng dụng MVC. Controller sẽ quyết định cái gì được trả về cho người dùng khi người dùng tạo ra một request trên browser. Một controller là một class ( C# class hoặc VB class). Trong ví dụ ứng dụng ASP.NET MVC Web Application mẫu luôn tồn tại 2 controller là AccountController.cs và HomeController.cs nằm trong folder Controllers HomeController.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Mvc.Ajax; namespace HiTest.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Title"] = "Home Page"; ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } public ActionResult About() { ViewData["Title"] = "About Page"; return View(); } } } 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. Bất kỳ phương thức nào có thuộc tính public đều là một action trong controller. Tạo một Controller mới Trong folder Controllers  phải chuột chọn Add  New Item  MVC Controller Class ( Figure 13)
  • 15. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 15 Figure 13. Tạo controller tên là SanPhamController.cs SanPhamController.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Mvc.Ajax; using BanHang.Models; namespace BanHang.Controllers { public class SanPhamController : Controller { DataClassesDataContext data = new DataClassesDataContext(); public ActionResult Index() { // Add action logic here ViewData["Title"] = "Sản phẩm"; return RedirectToAction("DanhMucLoaiSanPham"); } public ActionResult DanhMucLoaiSanPham() { // Code cua ban o day ViewData["Title"] = "Danh mục loại sản phẩm"; List<LoaiSanPham> lsp = data.LoaiSanPhams.ToList(); return View("DanhMucLoaiSanPham", lsp); } public ActionResult DanhSachSanPham(string loaisanpham) { ViewData["Title"] = "Danh sách sản phẩm trong loại sản phẩm";
  • 16. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 16 List<SanPham> sp = data.LaySanPhamTuLoaiSanPham(loaisanpham); return View("DanhSachSanPham", sp); } public ActionResult ChiTietSanPham(int id) { ViewData["Title"] = "Chi tiết sản phẩm"; SanPham ctsp = data.LaySanPhamQuaID(id); return View("ChiTietSanPham", ctsp); } } } 2.5 Tìm hiểu về Views Trong controller HomeController.cs, cả hai phương thức Index() và About() đều trả về một view. 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 ViewsHomeIndex.aspx và HomeController.About() sẽ trả về một view nằm ở vị trí đường dẫn ViewsHomeAbout.aspx View About.aspx <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="HiTest.Views.Home.About" %> <asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server"> <h2>About Us</h2> <p> TODO: Put <em>about</em> content here. </p> </asp:Content> View Index.aspx <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="HiTest.Views.Home.Index" %> <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server"> <h2><%= Html.Encode(ViewData["Message"]) %></h2> <p> To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>. </p> </asp:Content> Tất cả các thuộc tính nằm giữa 2 thẻ <asp:Content></asp:Content> đều có định dạng HTML và có thể tùy ý sửa đổi theo ý muốn. Tạo view cho controller SanPhamController.cs, trong SanPhamController.cs có 4 phương thứ c public là Index(), DanhMucLoaiSanPham(), DanhSachSanPham() và ChiTietSanPham() nên trong Views phải tạo 4 view tương ứng là Index.aspx, DanhMucLoaiSanPham.aspx, DanhSachSanPham.aspx, ChiTietSanPham.aspx bằng cách từ
  • 17. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 17 folder Views click phải chuột chọn Add  New Folder nhập tên folder mớ i tạo là SanPham. Từ folder SanPham click phải chuột chọn Add  View… (Figure 14) (ví dụ tạo view DanhMucLoaiSanPham) Figure 14. Tạo view DanhMucLoaiSanPham trong folder SanPham Index.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="BanHang.Views.SanPham.Index" %> <asp:Content ID="viewIndex" ContentPlaceHolderID="MainContent" runat="server"> <h1>Đây là trang chính của sản phẩm</h1> </asp:Content> DanhMucLoaiSanPham.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="DanhMucLoaiSanPham.aspx.cs" Inherits="BanHang.Views.SanPham.DanhMucLoaiSanPham" %> <asp:Content ID="viewDanhMucLoaiSanPham" ContentPlaceHolderID="MainContent" runat="server"> <h1> Đây là danh mục loại sản phẩm</h1> <% foreach (var lsp in ViewData.Model) { %> <li> <%= Html.ActionLink(lsp.TenLoaiSanPham, "DanhSachSanPham/" + lsp.TenLoaiSanPham, "SanPham") %> </li> <% } %> </asp:Content> DanhSachSanPham.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="DanhSachSanPham.aspx.cs" Inherits="BanHang.Views.SanPham.DanhSachSanPham" %> <asp:Content ID="viewDanhSachSanPham" ContentPlaceHolderID="MainContent" runat="server"> <h1>Đây là danh sách sản phẩm có trong chuyên mục</h1> </asp:Content> ChiTietSanPham.aspx
  • 18. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 18 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="ChiTietSanPham.aspx.cs" Inherits="BanHang.Views.SanPham.ChiTietSanPham" %> <asp:Content ID="viewChiTietSanPham" ContentPlaceHolderID="MainContent" runat="server"> <h1>Đây là Chi tiết sản phẩm</h1> </asp:Content> 2.6 Tìm hiểu về Models Một model trong ứng dụng ASP.NET 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 ( file định dạng dbml ) trong folder Models. Mô hình dữ liệu LINQ to SQL ( Figure 15 ) Figure 15. Mô hình dữ liệu LINQ to SQL Xây dựng lớp trợ giúp cho việc thao tác với dữ liệu thông qua LINQ to SQL DataClasses.cs using System; using System.Collections.Generic; using System.Linq; namespace BanHang.Models {
  • 19. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 19 partial class DataClassesDataContext { public List<LoaiSanPham> LayCacLoaiSanPham() { return LoaiSanPhams.ToList(); } public List<SanPham> LaySanPhamTuLoaiSanPham(string loaisanpham) { return SanPhams.Where(l => l.LoaiSanPham1.Id == loaisanpham).ToList(); } public SanPham LaySanPhamQuaID(int id) { return SanPhams.Single(s => s.Id == id); } } } Vớ i lớ p trợ giú p có thể thao tác dễ dàng hơn vớ i cơ sở dữ liệu khi cần. Chẳng hạn vớ i lớ p DataClasses.cs ở trên khi cần truy nhập để lấy thông tin về sản phẩm có mã Id, có thể viết như sau trong bất kỳ một code-behind nào của Views (ví dụ với view DanhMucLoaiSanPham.aspx.cs trong folder Views): Figure 16. Binding data và o trong ViewsDanhMucLoaiSanPham.aspx.cs Khi đó ta phải sử a đổi lại file ViewsDanhMucLoaiSanPham.aspx cho phù hợp vớ i code trên <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="DanhMucLoaiSanPham.aspx.cs" Inherits="BanHang.Views.SanPham.DanhMucLoaiSanPham" %> <asp:Content ID="viewDanhMucLoaiSanPham" ContentPlaceHolderID="MainContent" runat="server">
  • 20. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 20 <h1> Đây là danh mục loại sản phẩm</h1> <asp:ListView ID="listLoaiSanPham" runat="server"> <LayoutTemplate> <ul> <asp:PlaceHolder ID="itemPlaceHolder" runat="server"></asp:PlaceHolder> </ul> </LayoutTemplate> <ItemTemplate> <li> <%= Html.ActionLink(Eval("TenLoaiSanPham"), "DanhSachSanPham/" + Eval("TenLoaiSanPham"), "SanPham") %> </li> </ItemTemplate> </asp:ListView> </asp:Content> Views chỉ chứa tất cả những gì hiển thị cho người dùng trên browser, Controllers chỉ chứa các logic mà trả về view nào cho người dùng hoặc hướng từ action này đến action khác. Còn lại tất cả đều được viết trong Models. 2.7 Cấu trúc ViewsSharedSite.Master <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="BanHang.Views.Shared.Site" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title><%= Html.Encode(ViewData["Title"]) %></title> <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="page"> <div id="header"> <div id="title"> <h1>My Sample MVC Application</h1> </div> <div id="logindisplay"> <% Html.RenderPartial("LoginUserControl"); %> </div> <div id="menucontainer"> <ul id="menu"> <li><%= Html.ActionLink("Home", "Index", "Home")%></li> <li><%= Html.ActionLink("SanPham", "Index", "SanPham")%></li> <li><%= Html.ActionLink("About Us", "About", "Home")%></li> </ul> </div> </div> <div id="main"> <asp:ContentPlaceHolder ID="MainContent" runat="server" />
  • 21. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 21 <div id="footer"> My Sample MVC Application &copy; Copyright 2008 </div> </div> </div> </body> </html> 2.8 Kết quả Figure 17. Kết quả chạy ứ ng dụng khi thêm SanPham vảo ứ ng dụng ASP.NET MVC 3 Câu hỏi ôn tập Hỏi: Views của MVC có thể sử dụng AJAX, javascript không? Đáp: Được. Về bản chất, view trong ASP.NET MVC Framework cũng là một trang .aspx như với mô hình WebForm vì thế có thể thực hiện các tác vụ tương tự. Vì thế việc sử dụng jQuery, ASP.NET AJAX, và javascript đều có thể thực hiện được. Hỏi: 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ũ? Đáp: Chưa hẳn là thế. Nếu xây dựng trang web với nền tảng WebForm mà sử dụng ít các controls, usercontrols hoặc ít events thì giá trị ViewState và PostBack không lớn nên sự thực thi không hẳn đã chậm. Trang web xây dựng theo nền WebForm chỉ thực hiện chậm khi giá trị của ViewState là quá lớn. Hỏi: 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.
  • 22. Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 22 4 Tài liệu tham khảo http://www.asp.net/ http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx