ASP.NET 3.5 - Bài 3: Tổng quan về ASP.NET MVC Framework
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 Ta ̣ 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 Views\Shared\Site.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
gườ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âũ luôn tồn taị 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 muc̣ loaị san̉ phâm̉"; List lsp = data.LoaiSanPhams.ToList(); return View("DanhMucLoaiSanPham", lsp); } public ActionResult DanhSachSanPham(string loaisanpham) { ViewData["Title"] = "Danh saćh san̉ phâm̉ trong loaị san̉ phâm̉"; Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 16 List sp = data.LaySanPhamTuLoaiSanPham(loaisanpham); return View("DanhSachSanPham", sp); } public ActionResult ChiTietSanPham(int id) { ViewData["Title"] = "Chi tiêt́ san̉ 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 \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 <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="HiTest.Views.Home.About" %> About Us TODO: Put about content here. View Index.aspx <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="HiTest.Views.Home.Index" %> To learn more about ASP.NET MVC visit <a href="" title="ASP.NET MVC Website"> Tất cả các thuộc tính nằm giữa 2 thẻ đề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 taọ 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ôṭ choṇ Add New Folder nhâp̣ tên folder mới taọ là SanPham. Từ folder SanPham click phải chuôṭ choṇ 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" %> Đây la ̀trang chińh cuả san̉ phâm̉ 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"> Đây la ̀danh muc̣ loaị san̉ phâm̉ <% foreach (var lsp in ViewData.Model) { %> <%= Html.ActionLink(lsp.TenLoaiSanPham, "DanhSachSanPham/" + lsp.TenLoaiSanPham, "SanPham") %> 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"> Đây la ̀danh saćh san̉ phâm̉ co ́trong chuyên muc̣ 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"> Đây la ̀Chi tiêt́ san̉ phâm̉ 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êụ LINQ to SQL ( Figure 15 ) Figure 15. Mô hình dữ liêụ 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 LayCacLoaiSanPham() { return LoaiSanPhams.ToList(); } public List 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êụ khi cần . Chẳng haṇ 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ó ma ̃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 Views\DanhMucLoaiSanPham.aspx.cs Khi đó ta phải sửa đổi laị file Views\DanhMucLoaiSanPham.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 Đây la ̀danh muc̣ loaị san̉ phâm̉ <asp:PlaceHolder ID="itemPlaceHolder" runat="server"> <%= Html.ActionLink(Eval("TenLoaiSanPham"), "DanhSachSanPham/" + Eval("TenLoaiSanPham"), "SanPham") %> 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âú trúc Views\Shared\Site.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" ""> My Sample MVC Application Microsoft Vietnam – DPE Team |Bài số 3: Tổng quan về ASP.NET MVC Framework 21 My Sample MVC Application © Copyright 2008 2.8 Kêt́ quả Figure 17. Kết quả chaỵ ứng duṇg khi thêm SanPham vảo ứng duṇg 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
File đính kèm:
- ASP.NET 3.5 - Bài 3_Tổng quan về ASP.NET MVC Framework.pdf