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

Tài liệu ASP.NET 3.5 part 4 doc

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 (957.25 KB, 10 trang )

Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị
2


1 URL routing (Định tuyến URL)
1.1 Giới thiệu định tuyến URL
1.1.1 H thnh tuyn trong ASP.NET MVC làm gì?
ASP.NET MVC Framework có mt h thnh tuyn URL ( URL Routing System ) linh hot cho phép xác
nh các quy tc ánh x a ch URL bên trong ng dng. Mt h thnh tuyn có 2 m
 Xây dng mt tp hp các URL ng dng nh tuyn chúng ti các Controller và thc thi các
 x lý.
 Xây dng các URL g có th gc tr li Controllers/Actions ( ví d: form posts, liên kt <a
i gi AJAX )
S dng các quy tc ánh x URL  u khi m do cho vic lp trình ng
dng, nu mui cu trúc URL ( ví d /Catalog thành /Products ) có th i mt tp hp
quy tc ánh x mc ng dng mà không cn phi vit li mã lp trình bên trong Controllers và Views.
1.1.2 Các quy tnh tuyn URL mnh trong ASP.NET MVC Web Application
Mnh khi to ng dng vi ASP.NET MVC Web Application trong Visual Studio s to ra mt ASP.NET
Application class gi là Global.asax cha cu hình các quy tnh tuyn URL. Xây dnh tuyn thông
  c RegisterRoutes(ReouteCollection routes) và khi ng dng b u,  c
Application_Start() trong Global.asax.cs s g to ra bnh tuyn.
Global.asax.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace BanHang
{


// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit

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
);

}

Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị
3

protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Mnh tuyn URL trong ASP.NET MVC Framework có cu trúc dng: Controllers/ControllerAction/Id

Vi ASP.NET MVC Web Application thì mnh Controllers là HomeController, mnh ControllerAction là
Index, m nh Id là r    i tran  c xây dng thông qua template ASP.NET Web
Application thì mnh http://localhost/  vi http://localhost/Home/Index/
Khi ng dng ASP.NET MVC Web Application nhc mt Url, MVC Framework s nh giá các quy tc
nh tuyn trong tp h quynh Controller nào s u khin request.
MVC framework chn Controller bnh giá các quy tc trong bnh tuyn theo trt t  sn.
1.2 Ví dụ định tuyến URL




 .NET MVC Web Application:
To TimKiem URL

Figure 1. To controller TimKiemController.cs
Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị
4

Có 2 action trong TimKiem hin th mt trang search vi mi
dùng nhp t khóa c u khin khi yêu cu tìm kinh.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace BanHang.Controllers
{
public class TimKiemController : Controller

{
public ActionResult Index()
{
// Add action logic here
return View();
}

public ActionResult Results(string query)
{
return View();
}
}
}
Trong Global.asax.cs mt cách thnh tuyn mnh. Theo quy tnh tuyn mnh thì khi yêu cu mt
trang tìm kia ch c gi theo s ng vi [controller]/[action]/[id] là /TimKiem/Results/[string
query]. Cách dùng này không có v gu mt cách tùy binh tuy i thành
/TimKiem/[string query]. Thêm vào trong Global.asax.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace BanHang
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit

public class MvcApplication : System.Web.HttpApplication

{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"TimKiem", // Route
name
"TimKiem/{query}", // URL with parameters
new { controller = "TimKiem", action = "Results" } // Parameter
defaults
);

routes.MapRoute(
"Default", // Route
name
"{controller}/{action}/{id}", // URL with
parameters
Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị
5

new { controller = "Home", action = "Index", id = "" } //
Parameter defaults
);

}

protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);

}
}
}
To 2 view hin th d li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" %>
<asp:Content ID="viewTimKiem" ContentPlaceHolderID="MainContent" runat="server">
<form method="post" action="TimKiem/Search">
<input type="text" id="txtTimKiem" name="txtTimKiem" />
<input type="submit" value="Tìm Kiếm" />
</form>
</asp:Content>
Result.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
AutoEventWireup="true" CodeBehind="Results.aspx.cs"
Inherits="BanHang.Views.TimKiem.Results" %>
<asp:Content ID="viewResults" ContentPlaceHolderID="MainContent" runat="server">
Kết quả dữ liệu tìm kiếm được ở đây
</asp:Content>
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"
"
<html xmlns="
<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>
Microsoft Vietnam – DPE Team | Bài số 4: Định tuyến URL và điều phối hiển thị
6

<li><%= Html.ActionLink("Sản phm", "Index", "SanPham")%></li>
<li><%= Html.ActionLink("Tìm kiếm", "Index", "TimKiem")%></li>
<li><%= Html.ActionLink("About Us", "About", "Home")%></li>
</ul>

</div>
</div>


<div id="main">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />

<div id="footer">
My Sample MVC Application &copy; Copyright 2008
</div>
</div>
</div>
</body>
</html>






 ( Figure 2)

Figure 2 







.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. 


wData dictionary  . 












/value ( [] = 



).
2.1 Điê
̀
u phô
́
i hiê
̉
n thi
̣


̃
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 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";

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.LaySanPhamTuID(id);

return View("ChiTietSanPham", ctsp);
}

}
}
2  : 1 <%= %> trong code, 2 



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">
<h1>Đây là danh sách sản phẩm có trong chuyên mục</h1>
<ul>
<% 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


<li>

<%= Html.ActionLink(sp.TenSanPham , "ChiTietSanPham/" + sp.Id,
"SanPham") %>

</li>

<% } %>
</ul>
</asp:Content>
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 <List<BanHang.Models.SanPham>>
{

}
}





Bind Da

 -behide Views\SanPham\DanhSachSanPham.aspx.cs 
ViewData,  <asp:DataList>.    
WebForm nên trong Views\SanPham\DanhSachSanPham.aspx 



 
sinh ID ( 

00_listView ), .
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">
<h1>Đây là danh sách sản phẩm có trong chuyên mục</h1>


<asp:DataList ID="listView" runat="server">
<ItemTemplate>

<%= Html.ActionLink(Eval("TenSanPham") , "ChiTietSanPham/" +
Eval("Id"), "SanPham") %>

</ItemTemplate>
</asp:DataList>
</asp:Content>
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 <List<BanHang.Models.SanPham>>
{
public void Page_Load()
{
listView.DataSource = ViewData["SanPham"];
listView.DataBind();
}

}
}






2.2 Điê
̀
u phô
́
i hiê
̉
n thi
̣

̃
liê
̣
u vơ
́
i cch dng Strongly Typed Classes
2.2.1 











 





  





 -


C#
 





.

.aspx.












#.
 .
2.2.2 -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<Models.SanPham> SanPham { get; set; }
}
}






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";

//List<SanPham> 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 sản 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 




Trong Views\SanPham\DanhSachSanPham.aspx 








SanPhamController.
















 , 














 .
<T> 







ASP.











 . ViewPage<T> ( 













) 




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 <DuLieuDanhSachSanPham>
{
public void Page_Load()
{

}
}
}

3 Câu ho
̉
i ôn tâ
̣
p

Hi: 









 



 , 














?

Đa
́
p: 









, 2 





: 



















 









 . 

























. 



















.
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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 i mt mô hình
d lic xây dng các Controllers khác nhau cùng truy cn mô hình d lic
hic. Mi Controllers s có nhing vi m Views.

4 Ti liệu tham kho


/>controllers-to-views.aspx

×