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

