ASP.NET 3.5 - Bài 4: Định tuyến URL và điều phối hiển thị

Table of Contents

1 URL routing (Định tuyến URL) . 2

1.1 Giới thiệu định tuyến URL . 2

1.1.1 Hệ thống định tuyến trong ASP.NET MVC làm gì?. 2

1.1.2 Các quy tắc định tuyến URL mặc định trong ASP.NET MVC Web Application . 2

1.2 Ví dụ định tuyến URL. 3

2 Điều phối hiển thị dữ liệu . 6

2.1 Điề u phố i hiể n thị dữ liệ u vớ i ViewData Dictionary . 6

2.2 Điề u phố i hiể n thị dữ liệ u vớ i cá ch dù ng Strongly Typed Classes . 9

2.2.1 Lợi í ch củ a việ c dù ng strongly typed . 9

2.2.2 Ta ̣ o strongly-typed DuLieuDanhSachSanPham trong folder Models . 9

2.2.3 Dùng ViewData dictionary v ớ i mộ t đố i tượng ViewData strongly typed . 11

3 Câu hỏ i ôn tậ p . 11

4 T ài liệ u tham khả o . 11

pdf11 trang | Chuyên mục: ASP.NET | Chia sẻ: dkS00TYs | Lượt xem: 2457 | Lượt tải: 2download
Tóm tắt nội dung ASP.NET 3.5 - Bài 4: Định tuyến URL và điều phối hiển thị, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
iệu được điều khiển trong TimKiemController.cs là Index.aspx và Results.aspx 
Index.aspx 
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
AutoEventWireup="true" CodeBehind="Index.aspx.cs" 
Inherits="BanHang.Views.TimKiem.Index" %> 
Result.aspx 
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
AutoEventWireup="true" CodeBehind="Results.aspx.cs" 
Inherits="BanHang.Views.TimKiem.Results" %> 
 Kết quả dữ liệu tìm kiếm được ở đây 
Thêm vào Views\Shared\Site.master một tab tìm kiếm 
<%@ 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ố 4: Định tuyến URL và điều phối hiển thị 6 
 My Sample MVC Application © Copyright 2008 
Kết quả thưc̣ thi chương trình ( Figure 2) 
Figure 2 Thưc̣ hiêṇ tìm kiếm với TimKiemController.cs 
2 Điều phối hiển thị dữ liệu 
ViewData là thành phần quan trọng trong việc hiển thị dữ liệu của ASP.NET MVC Framework. Mỗi Controller 
đều có một ViewData dictionary có thể dùng để đưa dữ liệu vào View . Để đưa dữ liêụ vào ViewData dùng điṇh 
dạng key/value ( ví dụ ViewData[“Title’’] = “Sản phẩm” ). 
2.1 Điều phối hiể n thị dữ liệ u với ViewData Dictionary 
SanPhamController.cs 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị 7 
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̉"; 
 List 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.LaySanPhamTuID(id); 
 return View("ChiTietSanPham", ctsp); 
 } 
 } 
} 
Có 2 cách tiếp cận việc hiển thị dữ liệu trong Views : cách 1 dùng trực tiếp trong code, cách 2 sử duṇg 
server controls để hiển thi ̣ dữ liêụ 
Thực thi view với cách dùng 
Views\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̣ 
 <% foreach (var sp in ViewData.Model) 
 { %> 
Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị 8 
 <%= Html.ActionLink(sp.TenSanPham , "ChiTietSanPham/" + sp.Id, 
"SanPham") %> 
Views\SanPham\DanhSachSanPham.aspx.cs 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using BanHang.Models; 
namespace BanHang.Views.SanPham 
{ 
 public partial class DanhSachSanPham : ViewPage > 
 { 
 } 
} 
Thực thi view với server controls 
Bind Data vào code -behide Views\SanPham\DanhSachSanPham.aspx.cs có thể dùng ViewPage hoặc từ điển 
ViewData, để hiển thị dùng một server control là . Vì không có như 
WebForm nên trong Views\SanPham\DanhSachSanPham.aspx không chứa môṭ ViewState và cũng sẽ không phát 
sinh ID ( kiểu như Ctrl00_listView ), toàn thể trang chỉ chứa các định dạng HTML. 
Views\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̣ 
 <%= Html.ActionLink(Eval("TenSanPham") , "ChiTietSanPham/" + 
Eval("Id"), "SanPham") %> 
Views\SanPham\DanhSachSanPham.aspx.cs 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using BanHang.Models; 
namespace BanHang.Views.SanPham 
Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị 9 
{ 
 public partial class DanhSachSanPham : ViewPage > 
 { 
 public void Page_Load() 
 { 
 listView.DataSource = ViewData["SanPham"]; 
 listView.DataBind(); 
 } 
 } 
} 
2.2 Điều phối hiể n thị dữ liệ u với cách dùng Strongly Typed Classes 
2.2.1 Lợi ićh của việc dùng strongly typed 
 Tránh được việc dùng chuỗi string để tra cứu các đối tượng và không phải mất thời gian kiểm tra biên dịch 
cho cả Controllers và Views 
 Tránh được việc phải đưa dữ liệu vào ViewData dictionar y khi sử duṇg ngôn ngữ strongly -typed dưạ trên 
C# 
 Nhâṇ đươc̣ code thông minh trong cả file .aspx và .aspx.cs như dùng với môṭ class thưc̣ thu ̣của C#. 
 Dùng lại được code trong khi tạo các unit test trong ứng dụng. 
2.2.2 Tạo strongly-typed DuLieuDanhSachSanPham trong folder Models 
DuLieuDanhSachSanPham.cs 
using System; 
using System.Data; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
namespace BanHang.Models 
{ 
 public class DuLieuDanhSachSanPham 
 { 
Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị 10 
 public string TenLoaiSanPham { get; set; } 
 public List SanPham { get; set; } 
 } 
} 
Sửa đổi laị SanPhamController.cs cụ thể là thay đổi phương thức DanhSachSanPham 
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̉"; 
 //List sp = data.LaySanPhamTuLoaiSanPham(loaisanpham); 
 //return View("DanhSachSanPham", sp); 
 DuLieuDanhSachSanPham sp = new DuLieuDanhSachSanPham(); 
 ViewData.TenLoaiSanPham = loaisanpham; 
 ViewData.SanPham = data.LaySanPhamTuLoaiSanPham(loaisanpham); 
 return View("DanhSachSanPham", ViewData); 
 } 
 public ActionResult ChiTietSanPham(int id) 
 { 
 ViewData["Title"] = "Chi tiêt́ san̉ phâm̉"; 
 SanPham ctsp = data.LaySanPhamTuID(id); 
 return View("ChiTietSanPham", ctsp); 
 } 
 } 
} 
Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị 11 
2.2.3 Dùng ViewData dictionary với một đối tượng ViewData strongly typed 
Trong Views\SanPham\DanhSachSanPham.aspx không cần thay đổi khi có sư ̣thay đổi trong 
SanPhamController.cs vì lý do là đối tươṇg ViewData strongly typed đa ̃đươc̣ đưa tới từ ViewPage , đối tươṇg 
ViewData dictionary se ̃tư ̣đôṇg sử duṇg tìm đến các thuộc tính nằm trong ViewData strongly typed. 
Dùng lớp cơ sở ViewPage mang dữ liêụ tới ViewData strongly typed 
ASP.NET MVC Framework hỗ trơ ̣môṭ dictionary dưạ trên lớp cơ sở ViewPage . ViewPage ( T là môṭ kiểu 
của lớp ViewData mà Controllers chuyển tới Views ) đươc̣ thay đổi 
Views\SanPham\DanhSachSanPham.aspx.cs 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using BanHang.Models; 
namespace BanHang.Views.SanPham 
{ 
 public partial class DanhSachSanPham : ViewPage 
 { 
 public void Page_Load() 
 { 
 } 
 } 
} 
3 Câu hỏ i ôn tậ p 
Hỏi: Điṇh tuyến Url khi sử duṇg Controllers khai báo phương thức ActionRes ults có chứa tham số , thưc̣ thi 
chương trình báo lỗi thì phải làm sao? 
Đáp: Khi taọ phương thức trong Controllers có sử duṇg tham số, có 2 trường hơp̣ xảy ra: phương thức chứa tham 
số có thể nhâṇ giá tri ̣ null hoăc̣ phương thức c hứa tham số không cho phép nhâp̣ giá tri ̣ null . Với tham số không 
cho phép nhâp̣ giá tri ̣ null thì nếu goị Url không chứa tham số thì se ̃báo lỗi. Có thể giải quyết bằng cách cho phép 
nhâṇ giá tri ̣ null vào tham số hoăc̣ bắt buôc̣ khi goị Url phải đưa tham số đầu vào. 
Hỏi: Trong một ứng dụng MVC, liệu có tồn tại 1 mô hình dữ liệu Models, có n Controllers, mỗi Controllers điều 
khiển m Views không? 
Đáp: Có. Thực chất việc tạo ra mô hình MVC chính là một cách thể hiện lập trình đa mục đích. Với một mô hình 
dữ liệu đã có, việc xây dựng các Controllers khác nhau cùng truy cập đến mô hình dữ liệu đã có là hoàn toàn thực 
hiện được. Mỗi Controllers sẽ có nhiều hơn m phương thức tương ứng với m Views. 
4 Tài liệu tham khảo 
controllers-to-views.aspx 

File đính kèm:

  • pdfASP.NET 3.5 - Bài 4_Định tuyến URL và điều phối hiển thị.pdf
Tài liệu liên quan