Len CAM ON Tnrac tien, em xin pile!) duqc giri lei cam an du sac tai Thac si" Tran Quang Duy,

)

ngtred they di nhiet tinh gulp di, va hiring din em tong qui trinh thvc hi8n khea luan nay.

Em ming xin giri den qu9 thiy c8 dang giang day tat truing Dai hoc Thing Long

n6i chung va cac thiy c8 trong khoa Toan Tin n6i ring lei biet an chin thanh, cam an

they c8 vi di het ling truyen dat cho em nhimg kien thirc trong nhing nim thing ngai

tren ghe nha tnrImg. Kinh chic Glut thiy co Wen luau math khoe, gat hai duqc nhie'u

thanh cong trong sv nghiep.

Ha noi, ngizy 16 thtbtg 6 nom 2013

Dii di cif) gang het sire de dux hi4n de tai nhung kh6 tranh kh6i nhung thieu sot, em rat mong titian dugc sir gap 9 cis qu9 thiy co, cac anh chi va cac ban a em co the tier b0 hen.

Sinh via thw hien

Deu Huy Hang

Trang 2/109

M1JC LI,IC

DANH MIX CAC THUAT NGU VA T& VIET TAT (cid:9)

6

DANH MIX HINT ANH (cid:9)

7

GIOI THItU CHUNG (cid:9)

9

CHUONG 1 - TONG QUAN VE ASP.NET MVC FRAMEWORK (cid:9)

11

1.1. Gidi thieu ye me hinh MVC (cid:9)

11

1.1.1. Cie thanh plan cilia MVC (cid:9)

11

1.1.2. Hoat dOng coa m6 hinh MVC (cid:9)

12

1.1.3. LIU diem yit nhuot diem cda MVC (cid:9)

13

1.2. Gbh thieu ye ASP.NET (cid:9)

13

1.3. ASP.NET WebForm truyen thong (cid:9)

13

1.4. ASP.NET MVC Framework (cid:9)

15

1.4.1. Nguen g6c (cid:9)

15

1.4.2. Cac thanh Oat ca ben cat ASP.NET MVC (cid:9)

16

17

1.4.3. Qua trinh host dOng cna mOt img dung ASP.NET MVC (cid:9) 1.4.4. MOt s6 tinh rang n6i 1* cna ASP.NET MVC Framework (cid:9)

17

1.4.5. Uu diem (cid:9)

18

1.4.6. Nhugc diem (cid:9)

18

1.4.7. So sinh gilla ASP.NET webform vit ASP.NET MVC (cid:9)

18

1.4.8. Lan quen yeti ung dung ASP.NET MVC Framework (cid:9)

20

CHUONG 2 - CAC THANH PHAN CHINH CUA ASP.NET MVC (cid:9)

34

2.1. Controller yi action method (cid:9)

34

2.1.1. Cac ldp chinh elm Controller (cid:9)

34

2.1.2. Action Method (cid:9)

35

2.1.3. Clic ket qua tni ye kik ActionResult (cid:9)

36

2.1.4. NhAn cac ditu vito (cid:9)

37

2.1.5. Filter (cid:9)

40

2.2. View (cid:9)

45

Trang 3/109

2.2.1. Khasi niem ViewEngine (cid:9)

45

2.2.2. Geri thieu ye Razor (cid:9)

45

2.2.3. Them nOi dung dOng cho Razor View (cid:9)

46

2.3. Model (cid:9)

62

2.3.1. Model Binding (cid:9)

63

2.3.2. Model Validation (cid:9)

69

2.4. URL WI routing (cid:9)

75

2.5. jQuery trong ASP.NET MVC (cid:9)

79

79

80

2.5.1. Gied thieu (cid:9) 2.5.2. Co ban ve jQuery (cid:9) 2.5.3. jQuery tich hqp trong ASP.NET MVC (cid:9)

80

2.6. Bio mat trong ASP.NET MVC (cid:9)

81

2.6.1. Cross-Site Scripting (cid:9)

81

2.6.2. SQL Injection (cid:9)

82

CHUONG 3 - CHUONG TRINH uNG DIJNG (cid:9)

85

3.1. MO to bai town (cid:9)

85

3.1.1. Cac dti ttrqng tham gia vio he thong (cid:9)

85

3.1.2. Cac chirc thing chinh ctia img dung (cid:9)

85

3.1.3. Su dO use-case chfrc &mg caa he thong (cid:9)

86

3.2. TO chirc ca soft der lieu (cid:9)

88

3.2.1. M8 hinh cc se de lieu (cid:9)

88

3.2.2. Chi tiet cac bang trong ca so de lieu (cid:9)

89

3.3. Mai trirtmg cal dat (cid:9)

91

3.4. MA ngutn chuong trinh (cid:9)

92

3.4.1. Cau frac cac file trong ting dung (cid:9)

92

3.4.2. Anh za cac lop yen file twang img (cid:9)

93

3.4.3. So luqc ve cac lop chinh (cid:9)

96

3.5. MOt so hinh anh minh hqa ve ting dung (cid:9)

105

Trang 4/109

KET LUAN (cid:9)

108

TAI LIIrU TRAM KHAO (cid:9)

109

Trang 5/109

DANH MVC CAC THUAT NG& VA TIT VIT TAT

Class Lop

Request You au

Action method Phuong thirc hog Ong

Client May lchich

Server May chit

Code MA lenh

NameSpace Kh6ng gian ten

Browser Trinh duy6t

Framework Nen tang

Filter BO 19c

Validation Xic nhin

MVC Model View Controller

CSDL Co so dii li6u

HTML HyperText Markup Language

XSS

HTTP HyperText Transfer Protocol

Cross Site Scripting

URL Uniform Resource Locator

Trang 6/109

DANH MDC HINH ANH

Hinh 1.1 Ma hinh MVC (cid:9)

11

Hinh 1.2 Quy trinh hogt dung ctia mo hinh MVC (cid:9)

12

Hinh 1.3 Cong nghe ASP.NET WebFortn (cid:9)

13

Hinh 1.4 Cie thanh phdn co ban &la ASP.NET MVC (cid:9)

16

Hinh 1.5 ASP.NET WebForm vas ASP.NET MVC (cid:9)

18

Hinh 1.6 Khasi tgo Ong dyng ASP.NET MVC (cid:9)

20

Hinh 1.7 HOp thogi New ASP.NET MVC3 (cid:9)

21

Hinh 1.8 Minh hpa mot Solution Explorer ctia ASP.1VET MVC3

22

Hinh 1.9 Giao Bien co ban khi chgy Ong thing ASP.NET MVC ca Ian (cid:9)

23

Hinh 1.10 Giao dien thy chink thay dal churmg trinh trong khi Debug (cid:9)

24

Binh 1.11 Kit not cash die' lieu bang Entity Framework — boot 1 (cid:9)

24

Hinh 1.12 Kit nil ca set die lieu bang Entity Framework — bleat 2 (cid:9)

25

Plink 1.13 Kit not co sb &I lieu bang Entity Framework — bulk 3 (cid:9)

25

Hinh 1.14 Kit not co sas dir lieu bang Entity Framework — burry 4 (cid:9)

26

Hinh 1.15 Kit nii co set die lieu bang Entity Framework — burry 5 (cid:9)

27

Hinh 1.16 Kit co so die lieu bang Entity Framework— buoy 6 (cid:9)

27

Rink 1.17 Minh km them mai met Controller -1 (cid:9)

28

Hinh 1.18 Minh hoe them mai mot Controller - 2 (cid:9)

28

Hinh 1.19 Minh hoe them mai mot Controller - 3 (cid:9)

29

Hinh 1.20 Minh hpa them mai mot Controller - 4 (cid:9)

30

Hinh 1.21 Minh hpa them mai mot View -1 (cid:9)

31

Hinh 1.22 Minh km them mai mat View - 2 (cid:9)

31

Hinh 1.23 Minh hpa them mbi mot View - 3 (cid:9)

31

Hinh 1.24 Minh hpa them mai mot View - 4 (cid:9)

32

Hinh 1.25 Minh Iota them mot mot Model (cid:9)

33

Hinh 2.1 Minh hpa tgo mat lnline HTML helper (cid:9)

48

Hinh 2.2 Kit qua sei dyng Section (cid:9)

58

Trang 7/109

(cid:9)

60

62

(cid:9)

86

Hinh 2.3 Tao mat Partial View (cid:9) Binh 2.4 Minh hpa ket qua tra ve mat Child Action Hinh 3.1 Sa do use-case char tiling cue admin (cid:9)

87

Hinh 3.2 Sa da use-case char ming ctia ngvoi dung (cid:9)

88

Binh 3.3 MO hinh ca so du lieu cho Ling dung (cid:9)

Binh 3.4 Trang chti czia website (cid:9) 105

106

106

Hinh 3.5 Giao then them min nha xucit ban (cid:9) Hinh 16 Danh such cut nha nazi ban trong he thong (cid:9) Hinh 3.7 Giao dien chinh situ thong tin ve nha xuat ban (cid:9)

107

Hinh 3.8 Giao dien chat ming cAlt hang (cid:9)

107

Trang 8/109

GICTI THIOU CHUNG

Tnr6c day khi thiet ke min website, nhang ngtrai mai tim hieu s8 phai ton rat nhieu

ding sac de hoc, nghien dm, vi hp se mat mot khoing thin gian kh6ng rthe de twin thinh

website yen day dit cac tinh ding. Sau da, ho can bo ra rat nhieu cong sac chay chit

cling nhu sira 18i, khic phuc cac van de bao mot_ va cu6i cuing sin pham hp lam ra cling

chua chic "sfinh vai" 81:cc v6i cac sin phial ra dfri truerc do. Nam bat duqc dieu nay,

Microsoft da cung cap mot nen tang phat then ling dung web nham ginp ich cho ngulyi sir dung, do lit ASP.NET.

ASP.NET MVC la met trong taming mo hinh duqc cung cap beri ASP.NET . NO duqc

xay dung theo m8 hinh MVC (Models, Views va Controllers), gulp Lich biet cac thinh phan trong ling dung. Val me hinh nay, nhang lap trinh vien co the a ding xay dung nhang website von cAu truc chat che, rinh mach. Ngoai ra, no cling giop cho viec sira 18i, thay the vi thin nghiem cac chic nang ctia website tra nen a ding horn.

Veri nhiing tru diem tren, ASP.NET MVC gin rthir se tra thanh met nen tang chinh

trong viec xay dung va phat trien cac website. Vi vay, trong lchoa luan Mt nghiep nay, em

se tim hieu ve cong nghe ASP.NET MVC Framework caa Microsoft va xay dung melt ling dung dua tren ding nghe nay.

Myc dich nghien ct?u tali kh6a ken:

- Tim Mau ve met cong nghe mai;

- Phuc vu cho viec xay dung mot website giai thieu vi dat hang sach, nhim lip dung

nhftng kien tit da duqc tim hieu vao thuc te;

- Clung cap met tai lieu Tieng Viet ve cong nghe nay.

Phtrong phip nghien coy:

Nghien cuu 15, thuyet th8ng qua ebook dui Microsoft va the then din;

- Tang buck tim hieu cac vi du ca ban, sau do lip dung vao met ling dung nho, din din

phat trien thinh met chuang trinh;

- Ring hop cac kien thac thinh bio cao va xay dung chuang trinh Ling dung.

Trang 9/109

Nei dung dm tai lieu duce chia lam 3 chtrang.

Chuang 1 — Tong quan ve ASP.NET MVC FRAMEWORK

Chuang nay se gioi thieu ve m6 hinh MVC cling nhu dtra ra cai nhin tong quat ve

ASP.NET MVC.

Chuang 2 — CIIc thenh phin chinh cua ASP.NET MVC

Chucmg nay se tim hieu chi tiet ve ck thinh phan chinh cita ASP.NET MVC, nhu la

Controller, Model, View, URL, jQuery va met so van de bao mat tong ASP.NET MVC.

Chuang 3 — Chuang trinh inng dung

Nei dung chuong nay la giai thieu ve trig dung duce xay dung dua tren cling nghe

ASP.NET MVC. U'ng citmg de la met website cita dra hang sach yea Unit nang quan 19,

giai thieu san phim va (tat hang truc tuy'en.

Trang 10/109

Chuang 1- Tong quan ye ASP.NET MVC FRAMEWORK

CHIMING 1 - TONG QUAN V ASP.NET MVC FRAMEWORK

1.1. Gitri thi$u ye m8 hinh MVC

Khi cic phin mem img dung ngay cang phit then km mph vi da clang thi vin de thiit

lei hen tnic cho phin mem cling tr6 n6n phiic tap hon. Nhung ung dung web gig day

cling da phit trien din met tam cao mei, ching kh8ng can la nhOng (mg dung web thing

thirang yeti chirc nang hiin thj thong tin ma la nherng hi dicing thong tin he trq nhung

trang web tucmg tic yeti ngubi ding. Nhieu giai phap thiet lea kien frac hi thong duqc dua ra vat aux dich lam cho hi tilting linh hog, mem deo, de phit then vi ton to lau dii. Trong de, giai phip this& ke theo m8 hinh kien true MVC duqc Trygve Reenskaug de xuAt vao nhOng am 70 coa the ky 20 to ra rat hieu qua.

Mo hinh MVC (Model - View - Controller) la met kien trite phin mem hay mo hinh thiitke dirge sir dung trong ky thuat phtm mem. N6 glop cho cic nha phit then tech img dung cila hq ra thanh 3 pill lchic nhau Model, View va Controller. mOi thanh phin c6 met nhiim vu ring biit va dije lap vei cic thanh phin khic.

1.1.1. Cac thenh phin ctia MVC

1111 Controller

Hinh 1.1 Mii hinh MVC

Model

Day la thanh phial chira tit ca cic nghiip vu logic, phuang thee zit 1Y, try mit

Trang 11/109

database, did tugng mo to de liiu nhu cic Class, ham xfr 19...

Chuang 1- T6ng quan ye ASP.NET MVC FRAMEWORK

View

Dam nhan viec hien thi thong tin, twang tac veri ngueri dung.

Controller

Gift nhiem vu nhOn (lieu huong cac you clu tit ngubi dimg va goi ding nhftng phuang

thfrc xir ly chung.

1.1.2. Hoot dung cart ma hinh MVC

Day la mist each dan giin de m8 to lei luting su kien duce xit ljr trong MVC:

- User twang tic yeti View, bang each click vim button, user gui yeti cku di. - Controller nhOn va dieu huong chimg den dung phuang thirc zit l5r er Model.

- Model nhan thong tin vi thvc thi cac you au.

- 'Chi Model hoan tat viec zit ljr, View se nhon &I lieu tir Model vi Controller se phin hhi lai ngtroi dung.

Y ear (cid:9)

I

I

n11.-

I

User gesture

Invoice action

11.1 Butane the

requested task

Notify changes •(cid:9)

Ask for changes

Updated Model

New View served to ithe user 4— (cid:9)

hinh 1.2 Quy trinh hoist dfing cua mo hinh MVC

Trang 12/109

Chtrcmg 1- Togng quan ye ASP.NET MVC FRAMEWORK

1.1.3. U'u diem va niurqc diem ala MVC

U'u diem:

The hien tinh chuyen nghiep trong lap trinh, phan tich thiet ke. Do avec chia thanh cac

v Nhuot diem:

thanh phith (Ric lap nen ginp phat trien img dung nhanh, don gian, de nang cap, bao tri..

Din vei du an nheo viec ap dung m8 hinh MVC gay ding kenh, tin then gian tong qua

trinh phat trien. TAn then gian trung chuyen d0 lieu cha cac thanh phin.

1.2. Giafri thieu ye ASP.NET

ASP.NET Ia mOt nen tang phat trien (mg dung web (web application framework) &roc phat trien va cung cap ben Microsoft, cho phep nherng ngutii lap trinh to ra nhitng hang web

ding, nhOng img dung web va nhOng dich vu web. Lin diu tien &roc dim ra thj throng vito

thang 2 nAm 2002 cimg v6i phien ban 1.0 ciut .NET framework, la ding nghe nen tiep ctia Microsoft Active Server Pages(ASP). ASP.NET ducc bien dich duel clang Common Language Runtime (CLR), cho phIp nhang win lop trinh vitt ma ASP.NET yeti bit kk ngon ng0 nao duqc ho try bei .NET language.

1.3. ASP.NET WebForm truyen thong

ASP.NET la mOt buec nhay vot khi lin diu )(Wit hien, nhim thu hop khoang cach gifta

pith trien Window Form Wong di ft:mg (cd thing thai) va phat trien web hueng HTML (Ichting tang thai) . Hinh duel day munh boa cong nghe ASP.NET Webform

ASP.NETWeb FOMIII Ante/IS components (pps, buttamone.) plus suptsful, obisebodned all programming modsi

ASPNET A int to hoctitT spolleations In KS Mcnnoles webers product), Clog you Interact MO IITTINataises and taponses

Att.

A muttiblipearwippdadepbtform (kaftan* thetbas-4, biasdikt Ns own 0.4)

Hinh 1.3 Cling nghg ASP.NET WebForm

Trang 13/109

Chuang 1- Thng quan ASP.NET MVC FRAMEWORK

V6i Web Forms, Microsoft da c6 in di HTTP vi HTML bang cach me phong giao dien

nguiri ding nhtr la met doi mow dieu lchien (Control) ce cau tnic hoot deng phia Server.

Mill di Wong dieu khien (Control) theo doi tang thai cim no thong qua cac you au (sir

dung tinh ring ViewState), bieu dien bang cric ma HTML !chi can thief. Ngoai ra, no con to

v NhOng diem Imut chi cast ASP.NET Web Forms

Ong kit not cac so kien phia Client (nhu so kien bem button) ten cac so kien phut Server duqc xu ly ttrcrng img. Thoc te, Web Forms 11 met 16p trim tucmg khOng to duqc thiet ke de cung alp giao clien ce xir ly so kien thong qua Web.

ASP.NET Web Forms truyin thing tong la met y mow rat tit, nhtrng thou te lei phit sinh nhOng dieu phim tip khic. Theo thin gian, viec sir dung ASP.NET Web Forms da nou WI len met so thieu set;

- ViewState: Co the duy tri trang thiti thong qua cac yeti tau (request) thutmg mang lui ket qua la nheng IchOi luqng 16n da lieu duqc chuyen giao giOa client vi server. Da lieu nay c6 the len den hang tram Kbs b met img dung web vira phai, vi n6 di qua lei

v6i bit ky yeu cau nito. Dieu nay lam ch..* di died gian ch6 /bin hoi vi lam ding nhu

cau bang thong dm server;

Page life cycle (Chu k9 ton tai ciut met trang web): Lit co the ket not sjr kien phia client veil mA xir 19 so kien phia server. NO phfrc tap vi a bj pha ver;

thirc sai ve viec tech biet cac thinh phen: M8 hinh code-behind cita ASP.NET cung cap met gisi phip cho phep img dung due code ra khei cac clang HTML vio thanh

met 16p code-behind net:1g biet. Dieu nay duqc hoan nghenh reng rai yeti viec tech biet

giao dien veri mA )(Cr ly. Nlumg thou te, nhOng nha phat trier duqc khuyen khich pha

ten mA giao dien veri mA )(Cr 11 img dung (nhu la xir ly CSDL) tong nhfmg 16p code-

behind khOng 16. Neu khong c6 so tech biet gift cac thinh phin, ket qua cuoi cling c6 the nit kh6 hieu;

Limited control over HTML (gidd Mtn kiem spat HTML): Server control to to ra cat mA HTML, nhtmg khang phai la mA HTML ma to mong dqi. Ngoii viec mA HTML min chfing thutmg khong than theo lieu chuin web hoes khong sir dung tot CSS ma he

Trang 14/109

Chuang 1- T6ng quan ye ASP.NET MVC FRAMEWORK

thong cac server control can tao ra cat gia tri ID phirc tap vi khong down truer duqc, lim kho khan trong viec sir dung JavaScript;

KM ming lciem thir thap: Cac nhit thiet ke caa ASP.NET khOng the du down ring Idem thir to gang se tra thank met phan tat yeu caa xu htrong phat then phan mem. Kh8ng

ngac nhien khi kien tnic chat the ma ho thiet ke la 'thong pha hqp vai viec tich hqp Ici'em thir.

ASP.NET van tip tuc phat trien. Phien bin 2.0 them mat thanh phan chuan de giiun bat

se luqng code ma chimg to can phiti to viet. Vai phien ban gan nhit ASP.NET 4.5, mui thir da duqc ming cep &mg ke. Phien ban ASP.NET 4.5 di ap dung met se tinh ming dm ASP.NET MVC vie Web Forms. Tuy vay, van can met han the ten to ben trong no.

1.4. ASP.NET MVC Framework

Nhu da giai thieu et Olin truck, ma hinh MVC vai uu diem cam minh di duce img dung trong met se alc framework. Trong do pluii ke den ASP.NET MVC, met framework ma nguen ma mai, xay dung tren ASP.NET.

ASP.NET MVC Framework duqc thvc thi tree me hinh model—view--controller (MVC). NO gun nhg, de Bang kiem thir phan giao dien, tich hqp cat tinh ming cira ASP.NET . MVC Framework duqc djnh nghTa trong namespace System.Web.Mvc va la met Olt cim Ichong gian ten System.Web.

1.4.1. NguBn goc

Tuy ding nghe ASP.NET MVC mai duqc ph& trien nhung no co ljch sir lau deri. Nen tang MVC duqc phat minh bai Trygve Renskaug, Ong di viet tang giay dau den not ve MVC vio nem 1978. Ban du no duqc gui la Thing Model View Editor pattern, nhung sau de no ductc dot ten i i li Model View Controller pattern.

ASP.NET MVC lan du lien St Men d6 la trong du an me ngtdin ma MonoRail. Nguen gac that sir de cho ra deri ding nghe Microsoft ASP.NET MVC li do Scott Guthrie (met trong nhOng nha sang tao m ASP.NET ) tren chuyen bay den Austin, Texas de not ve hOi thao Alt.NET vao thing 10-2007.

Trang 15/109

Phien bin ASP.NET MVC 1.0 duqc m dbi vio nam 2009.

Chuang 1- Tong quan ye ASP.NET MVC FRAMEWORK

ASP.NET MVC Framework

Binh 1.4 Ceic thank phan ca ban ciia ASP.NET MVC

1.4.2. Cic think phan cabin ctia ASP.NET MVC

Models: Cac (cid:9) tirgng Models li mOt phan ciia ling dung, cac di tucmg nay thiet 1#p

logic cila pit dO lieu cna ling dung. Meng thuimg, tic (cid:9)

tugng model lay vi luu tang thai cita model trong CSDL. Vi dp nhu, mOt doi Meng Product (sin pan) se lay MI lieu tit

CSDL, than tic tree dit lieu va se c#p nh#t de lieu ter lin vao bang Products 6 SQL Server.

Views: Views la cac thinh phan ding di hien thj giao dien ngubi dung (UI). Thong

thubng, view duet tio dun vio thong tin dfr lieu Models. Vi dp nhu, view dung di c#3 nh#t

bang Products se hien thj cac hQp van ban, drop-down list, vi cac check box data tren trpg thai hien nu cua mOt di Wong Product.

Controllers: Controller la cac thanh phan dung de quan ly Luang the ngubi dung, lam viec vei model vi chip view di hien thj giao dien ngtrei ding. Trong mOt Ong dung MVC,

view chi dirgc dung cie hien thj thong tin, controller chju trach nhiem quan ly va dap tra nOi

dung do ngtrbi dimg nhop vi tuang tac vai ngubi climg. Vi du, controller se quan ly cac clu lieu ngubi dung girl len (query-string values) vi gui cac gia trj de den model, model se lay chl lieu tit CSDL nhe viz cac gia tri nay.

MO hinh MVC glop Chung to duet cac Ong dung ma chting phan tack rich red cat

khia earth c»a Ong dung (logic ye nh#p lieu, logic xu lY tic vu va logic ye giao dien). MO hinh MVC chi ra min loni logic ke teen nen duet thiep li) 6 dau teen Ong dung. Logic giao dien (UI logic) thuOc ve views. Logic nhtep lieu (input logic) thuoc ve controller. Va logic the vp

(Business logic — la logic xir ly th8ng tin, muc dick chinh cua ung dung) thuOc ve model. Sir

phan chia nay giim chang to giim bat dugc sir phirc tip cita Ong dung va chi top twig vac

Trang 16/109

Chuang 1- Tag quan ye ASP.NET MVC FRAMEWORK

mOi khia canh can duce cai d#t a m8i that diem. Vi du nhtz chting to chi can top trung vito giao Bien (views) ma khong phai quan tam den logic xer 1S, thong tin elm ling dung.

Su phan tach rach reit ba thanh phan cita img dung MVC can gitip cho viec 1#p trinh

dies ra song song. Vi du nhu mQt 1#p trinh vien lam tee vei view, 1#p trinh vien thti hai

lo cii dot logic ciut controller va lop trinh vien thir ba c6 the top trung vio logic the vu cia

model tai cling met thai diem.

1.4.3. Qua trinh host dung ctia mOt (rug Mpg ASP.NET MVC

Cac giai doan thuc hien dui met ling dung ASP.NET MVC duce trinh bay duei day:

NhiIn you eau dau den: Trong file Global.asax, cac doi tuqng Route duce them Arlo RouteTable;

- Thuc hien viec djnh tuyen: Module UrlRoutingTable sir dung di tuqng Route dau

tien thich hqp trong top RouteTable de tao (cid:9) tuqng RouteData. DOi ttrong nay sau

do lai tao ra doi tuqng RequestContext (ifittpContext);

- To ra trinh xir ly yeu eau ling dung: Doi tuqng MvcRouteHandler tao ra met the

hien ctia 16p MvcHandler va truyen vao no the hien RequestContext;

To ra controller. Cie dOi tuqng MvcHandler sir dung the hien cita RequestContext

de Lie djnh dig tuqng IcontrollerFactory qua d6 tao ra the hien controller;

- Thur hien vai tr6 cis controller: The hien MvcHandler gui phuong thirc Execute

cita controller;

- Goi action method: DOi tuqng ControllerActionInvoker se xac djnh action method

cur met 16p controller de ggi ra.

1.4.4. MOt so tfnh nang ndl bOt cem ASP.NET MVC Framework

Tach bath cic tic vu cita ling dung.

- C6 kha nang ma rQng (extensible) & kha Hong nhimg (pluggable). Cie thanh phan ctia ASP.NET MVC duqc thiet ke de chting co the duce thay the hoc thy chink met cach a ding.

Trang 17/109

- ASP.NET MVC c6 thanh phan inh xa URL manh me, cho ph6p cluing to may dung nhang ling dung c6 cac dia chi URL xtic tich va de tim kiem. Cac dja chi URL IchOng

Chuang 1- Tong quan ye ASP.NET MVC FRAMEWORK

can phai c6 pan mer rang cita ten tap tin va duqc thiet ki de hO trq cac mau djnh clang

ten phu hqp vei viec toi uu hoa tim kiem (URL).

Hg trq cac tinh 'tang c6 sin ctia ASP.NET nhu ca the zee thus ngteri dimg, quan thenh vien, quyen, output caching va data caching, seession va profile, quan ly tinh

tang img dung, he thong cau hinh...

- ASP.NET MVC 3 con be sung met view engine mei la Razor View Engine cho phep

thiet lap cac view nhanh cheng, de ding va ton it ding sec han so vei vies sir dung

Web Forms View Engine.

1.4.3. U'u diem

- De ding quan ly su phirc tap cua img dung bang cacti chic img dung thank ba thinh

phan model, view, controller.

- HO trq tot han cho mo hinh phit then ung dung butt:1g Itiem thin. - He thOng djnh tuyen mash me.

HO trq tot cho cac img dung duct ay dung bei nhfrng dill co nhieu lip trinh vien vi

thiet ke ma yin quan ly dime tinh &mg dui img dung.

- HO trq nhfing tinh nang tat nhat de c6 6 ASP.NET .

1.4.6. Niurcrc diem

- Kh8ng Wong den su lden lam cho cac nhi phat trien ASP.NET webfonn ldt6 khan. - Yeu cAu c6 hieu biet ve HTTP, HTML, CSS va JavaScript.

1.4.7. So sal* gigra ASP.NET webform vi ASP.NET MVC

Minh 1.5 ASP.NET WebForm va ASP.NET MVC

Trang 18/109

Chuang 1- Tong quan vg ASP.NET MVC FRAMEWORK

.Net Framework: 118 trq clic loo img dung nhu desktop, web va cac img dung console. ASP.NET framework la met phin cha .NET framework, duct xay dung nhirn 118 trq

cac Ung dung Web (caching, authentication va authorization).

Trong di, Microsoft co 2 luremg phat trier web ten nen ASP.NET la ASP.NET Webforms va ASP.NET MVC. Muc dich ra dbi cita ASP.NET MVC chi la su thay dei ye mit to duy, no khetng hoan town thay the cho cO img dung ASP.NET Web Forms, va viec chcm huing nao de &Ay dung met website la thy thuk vao cac nha phat trier. Su khac bier gifta 2 Wong phat trien nay dirge the hien dual bang sau.

Tinh ring ASP.NET ASP.NET MVC

ICien tnic chuong trinh Kien frac me hinh Kien tnic sir dung viec phin chic

WebFotm > Business > chtrong trinh thanh Controllers,

Database Models, Views

Cu phap chuang trinh Sir (cid:9) dung (cid:9) cu (cid:9) phip (cid:9) Cac str kien duqc dieu khitn b61

cita webrom, eat cac su kien va controllers, cac controls khong do

controls do server quan 19 server quan 19

Troy cip du lieu Sir dung hiu het cac tong Phan lin dung LINQ to SQL class

nghe fly cip de lieu trong de tao me hinh tray cep dei urging

Ung dung

Debug Debug chuong trinh phii Debug c6 the sti dung cac unit test

kiem tra cac phircmg thirc trong

controller

thuc hien tit ca bao gom the lap truy 4p de lieu, sum hien thj, dieu lchien cac controls/

Ttic de phan tai TOG de chin MU trong Phan tai nhanh han

trang co qui Situ cac

controls vl ViewState qui

lon

Tuang tic veri KM Idt6 IchAn Thu*1 19i

javascript

Trang 19/109

Chuang 1- Tong quan ye ASP.NET MVC FRAMEWORK

URL Address

Cau tnic dia chi Sob much theo

au tine dia chi URL c6

dung dung Controllers/Action/ID

.aspx?&

1.4.8. Lim quen v61 (mg Eking ASP.NET MVC Framework

IM61 tgo mOt Gig dpiw MVC Trong bO pan mainVisual Studio 2010 &I co sin ASP.NET MVC Framework, to tao

mOt du ga mbi then dubng din sau: File > New Project > Visual C# > Web > ASP.NET MVC Web Application.

Now porn 'a

Slid TOWN=

Typo Veal Ca

was Ca

Puffin Inteffionce

Kul lac

A reject Ice aseffiej as appraise Sig ASPIC WIC 3

red Ca

• Vowel Ca

Madam

VINSON

Office

Cloud

Vaud Ca

a A9WWe yofficalion a 19/ET INC 2 Web Appia¤ es a AMC MI/CiffiliAppla... a ASPIC INC. Mr Appicsbee

Pffilaffia9 ShrePoit

WIC Empty WS Application

Veal Oa

Sivoight

Tel

was cc

VICF

a WIC WC 2 brae We Sopfeseen

Waal'

ASPMET Drente Dab as Web Anita

Keel OP

Visual C••

Weal Co

ASPIC DynelicDolo Jails 911. Wayfratan

was Cl

Hinh 1.6 Khoi too sing Ming ASP.NET MVC

Trang 20/109

Chuang 1- T6ng quan ve ASP.NET MVC FRAMEWORK

Sau khi bam OK, hOp thooi New ASP.NET MVC3 hien re.

ASMEM

aiSlaillilinallia

hoject Taupe

Watt doorplate

Osaiplia Addlult/dP.M7 WC 3 ripest. am& apairiltnisfas

Va spins

Er Um MIMS walk sash.

El Oen alma praint

Tett project maw

liktklorrw.Tests

Test framework

Votsal Strap Unit Test

- ANOn,l so

sao...,..1

1 (cid:9)

Minh 1.7 If(ip thogi New ASP.NET MVC3

Chting ta co the chon kieu template la Empty, Internet Application ho$c Intranet Application.

Empty se tao ra nhOng thu mut vi t$p tin tei thieu cho an,g dung MVC3.

Internet Application se tao Ira mot img din co 86 tram; m#c dinh, chiing taco the sirs dei vi airy dung tren n6.

- Tay chon Intranet Application tang tuong to nhu Internet Application, nhung &roc can filth stn de stl dung trong moi truerng 7LiC than; ngubi clung thong qua ha tang Domain/ Active Directory.

Chung ta tang co the tao project test tong veil Ong dung MVC tir cling mot oh ses.

Ben canh 46, ta tang co the chon chi 40 ViewEngine 11 ASPX ho#c Razor.

(3 day, ta chip Internet Application, Razor ViewEngine vi khong chon unit test project .

Beni OK de hoitn tit.

Trang 21/109

Chuang 1- Tang quan ye ASP.NET MVC FRAMEWORK

Solution Explorer se hien m nhu sau: g Solution "Avalcreies a moo • a Isfralowle

D (cid:9)

N (cid:9)

PuMelties ltidesenees r APP-Dete N CI Content N

Modds

SaiMs al Views

•r.' a Globate=

4S Globatesuccs A Imcka90-031119 Web.config

D. (cid:9)

Hinh 1.8 Minh hpa mot Solution Explorer cua ASP.NET MVC3

Bing duel day me ta nei dung throng dlin mkt met du an MVC Internet Apllication.

Duimg din MO ti

/App Data LAM tit &it lieu dm (mg dung. Chung ta co the them met

CSDL SQL vio thu mkt nly.

/Content Li thu mix throng chits nheng de lieu tlnh, nhu 11 hinh

anh, tep tin css,...

Visual Web Developer al dOng them thu mac Themes vio

trong Content. Thu nut themes 11 thu num chira cac tep

Jquery vi hinh anh. Trong du an nay ta co the iroa thu mac

themes.

Visual Web Developer rang them 1 file CSS chuim vio du

an ten lit Site.css trong thu mix Content. File CSS la file de

mks khi ta muon they doi style caa (mg dung.

/Controllers Chita cac lop controller oft chirc Wing nhijn Sc yeu au caa

ngtrbi ding vi phis holi lai.

MVC yen ciu ten cast tit ca cac file controller ket thee

'Prang 22/109

Chuang 1 - Tong quan ye ASP.NET MVC FRAMEWORK

bing the "Controller".

/Models Gam de lop di chin cic mi birth d6i ttryng cia ling dung.

Models quin 1ST vi thao tic voi di lieu.

/Views

Litu tit cic file HTML lien quan ten viec hien dil cost ting dung (giao then Wen ding). Thu muc Views chits Wang ting mai thu mqc cho n*

controller. Mic djnh trong thu muc View co 1 thu muc Shared ding de chia se Si nguyen gitta Sc controller.

/Scripts

Thu muc Script hru tilt Sc file Java Script Gila ling ding. Mic djnh Visual Web Developer se 4t thu mpc niy lem chuitn de chits cic file Jquery. File "modernize' li file

Javascript de ha trq HTML5 vi CSS3.

filch vd chgy

V6i viec Iva chip Internet Application fru* de, ling dung eta chting ta di c6 dui

chirc Ming ca bin. Ching ta chtty thfr bing cich bim F5 vi kit qui nhtr sau.

(cid:9)

0111•••11* (cid:9)

re.

My MVC Application

Welcome to AWAIT MVO

To Wen Men tout 451,,MT MK wok tramaliat

Hinh 1.9 Giao diets co ban khi chuy sing dyng ASP.NET MVC cti san

De dimg chuang trinh, ta t6 hip phim Shift + F5 ho$c chip Debug Menu vi chip Stop

Debugging.

Neu muon thvc hien that' dal trong khi Debug thi ta chin Tools > Option, sau 46:

Trang 23/109

Chuang 1- T6ng quan ye ASP.NET MVC FRAMEWORK

(cid:9)

relt and Coto. 6 a bale follt arikaulimen

Iteiarroq epliesThis

ineMe ague Et end Colima

R] invoked by debug coeraniwids

rrrol

ri Ask find

1•Vam about dale code

lust-In-Tone Dugout ilandow Symbob butdiToce

EL': Rank code chimes As debugging Li) Now pecanwiling r,,

Enable Stile debugging an appbcation running wider another user account

> PIPIVIMPPIO Took > Outten Took > NTeen > frTkl Designer > Office Teat > Wags Mains > SQL Sera Tags Ten Tomblin.

n

Hink 1.10 Giao diet, thy chink May ddt throng Binh tong khi Debug

1.4.8.3. Kit a 1 cash dfr Wu SQL Server bibsti Entity Framework

ADO.NET Entity Framework II met nen tang dtrqc sar dung de lam viec win CSDL.

Chung ta co the troy win, than tic voi database gain dip thong qua tic dui tircmg trinh.

Chang ta se kit not CSDL bang Entity Framework Database First. No se tin den;

two ra data model va ate lap cho chung ta tit met CSDL co sin. Day la met cich dip can

phO bien vi no thvc hien don giin, nhanh chong. Trong eaia so Solution click chuOt phii chip Add > New Item...

I-finh 1.11 Katcosh di? ligu bang Entity Framework — hair 1

Tsang 24/109

Chuang 1- Tong quan ye ASP.NET MVC FRAMEWORK

Tiep theo, chon ADaNET Entity Data Model balm Add

imp lass

Instaled Tenpldes (cid:9)

P

Wall OP

• rasa Code

et NS. LS Tea

Type vases • piled NMI is outing. ADOJET Lily Da DANK

%SOP

Gated we

Vaud Cs

%LS Or

?hides, Come WI* •apetlieg Weight

sail left A 1.111. Sra amps

SQL San Caen

rasa

SQL Saw %%Mew

nabs

rasa

ras a

a "Wire

Veal Cs

yfraTRs

Rink1.12 Kilt nth cash die liOu being Entity Framework— by& 2

Criao diein hien ra tint beln du6i, bilm Next

1,/ Dia

.....111.thiCalimb

VIStasold Onsald met

Genealetlhe modd ban a abbot Qs we paled tea the wadi an the pqect• avid Ibis wield Slams nay*, delalscoameclisa ad diele aptly Wok Mlle rt.

Fintsh

J

(cid:9)

Minh 1.13 left ca sb dit li4u bang Entity Framework— butk 3

Trang 25/109

Chuang 1- T6ng quan ASP.NET MVC FRAMEWORK

ant s6 mai hien ra, to chan New Connection vi thy chqn aic thong so. San d6 htun OK

Enter infommtion to connect to the selected data source or cick "Change to choose a different data source and/or provider.

Data source

Microsoft SQL Sever

(Sq11:tient) (cid:9)

E (cid:9) rr

Serve name

..

bullion

Log on to the sever

© Use Windows Authetiotion

Authentication

# Use SQL Saw

sa

User name (cid:9)

Password (cid:9) mew

D Save my password

Conned to a database

• Sdect or enter a database name

BookStore (cid:9)

.

C) Atbch a database fib

—I

Browse...

Logical name:

wwpwiml

1

Hinh 1.14 Kit ndi cosh d& lieu bling Entity Framework — buor 4

Trang 26/109

Chiron 1- Tang quan ye ASP.NET MVC FRAMEWORK

Tiep then, ta chtx Next

soy Del•

alp alma The Dub Canincinn

laid dab amecienalonill par masts a In ant Is Ihn

That mosses steins ippon Is contain swim deb for nap% • swelint is sap:St connect WS Sam Amin new deb s Sr eases tire as IN Ns* St Doss von to 'Muds this smiling tign in dis oarencion ryr

() lb. and into deintsse the mannafi+Isluti in my Appicalist ads

indialn the nvailive Sin in M. comndion liy

fray connedian *Mr

(cid:9) Calinioreocenteersint leanly benanonibt

indadnenanirJP/Bonidtannainefiliaren. ilmaillsedlonnivalnweviiimSysientbabiSICIellreiner conmedisenbingelkla Sources mania Itinsamenia

Pi Sant stay ceemenitin Slip

wlbyr WeinCanfig

loottiternEndlin

I

n

Hinh 1.15 Kit not cosh chi lieu bitng Entity Framework— burk 5

Cuii cone, ta barn Finish di boon thanh viec kit not toi CSDL tit SQL Server

invorntsult.e.

OrowYeelbildn OlOns

—. Mobs Ss dam sits MY* OM" Noddy

r (cid:9)

Tai nib nen DO new iimaiims

Muria ingubriepreslidaljel alas

g Include kw, log eigums

Mil Pampa

ininisynuas

Hinh 1.16 Kb nil CCI set dfr lieu being Entity Frwnework— buOr 6

'Prang 27/109

Chuang 1- Tong quan ve ASP.NET MVC FRAMEWORK

1.424. Thim mal mft Controller

Bey gib chimg to se them met controller cho du in.

Trong Solution Explorer, click phiti chuOt tren Toler Controllers vi chon Add >

Controller

Hinh 1.17 Minh hoa thin: tneri :wit Controller -1

Ta at ten Li "HelloWoridController", chun Emty controller trong Template va click OK.

Controller woe

► eNoWorldContsollee

Towhee

k ailItiniauis—sw....., , «J.. .a

Model class:

[

Data context class:

id

r

Views: Norte

I I

Hinh 1.18 Minh hpa thin; moi mot Controller - 2

Trang 28/109

Chuang 1- Tong quan ye ASP.NET MVC FRAMEWORK

Trong foler Controllers, chting dA co file v(ra duoc to vai ten HelloWorldController.cs.

Noi dung coa file nhu sau:

Solutionhpbeer (cid:9)

"' 4 X

iiMvcMovie.Conuollers.HeloWoo ',Untie)

CI using System;

Lt ataidan Noperfies

using Systas.CoLlections.Cseneric; using Systen.Linq; using System.Web; using System.ideb.14vc;

D Weems 4 Amu' Cal Content

O nawespace HvcHovie.Controllers

(

public class HelloMorldController : Controller

O

caftans • AccountConboler.cs • HelloWoddConbolbs HotneCantrolern

{

S

Models

// // GET: /HelloWorld/

Saints ') rj Vim

public ActionResult Index()

El

gol Globs: sax

Web.config

return View();

}

}

}

giokeioni-

"" (cid:9)

"[mansegtsaan

,...

Hinh 1.19 Mirth boa then miti mot Controller - 3

Ben bong Si public class HelloWorldController, Mo hai phuong thirc có code nhu ben ben

&Mi. Controller se travE mat (cid:9) HTML.

using System.Web; using System.Web.Mvc; namespace Muctiovie.Controllers

public class HelloWorldController : Controller

{

public string Index()

(

return "This is my default action..";

}

public string Welcome()

return "This is the Welcome action method..";

}

'tram 29/109

Chuang 1- Tong quan ve ASP.NET MVC FRAMEWORK

Ta chay ung dung (nhim F5 hoc Ctrl+F5). Trong trinh duyet them "HelloWorld" vio daring

thin dja chi tree thanh address. Ket qui 11:

Rink 1.20 Minh hpa them mat mot Controller - 4

1.4 85 Thim m61 mr View

Thong thubng chting ta khemg muon controller trit ye truc tiep HTML, vi diau nay

lim cho code care clueing ta trb nen roam S. Thay vio d6 thong ta se dung file view

template rieng biet de to HTML.

de to HTML tri ve cho client).

Ta se dieu chink class HelloWorldController de sir dung file view template (ding

Tnrac tient ta thay doi phuong thec Index de tri ve mOt dOi Mang View nhu sau:

{

public ActionResult Index()

return Via();

}

Chung ta se to mot view template sir dung cho phuang thee Index bang tech click

chuOt phai vio phuong thirc Index chon Add View.

Trattg 30/109

Chuang 1- T6ng quan ye ASP.NET MVC FRAMEWORK

public class lioweController : Con;{

(cid:9) Addvers.

{

public ActionResult Index() /21 GoToinew

Matador

return View(); (cid:9)

(cid:9)

Onjpankelliwis

GesteUMTens-

Binh 1.21 Minh hpa them moi tnot View -1

Hop tho?i Add View met hien, to de mOc djnh vh click Add

Vow nom

Ifietv

Fri Onla•tenglrlivelvinv

Maras

SSW. letplels

Erni*

o Cale a•paielvirso

Una *mut at memes

asornmply VI it sel in lias_viessiNted

ontentPlaceboider Iti

MinCartent

Binh 1.22 Minh hpa thim maxi m(g Hew - 2

Trong Solution Explorer, file Index.cshtml di duct tno ra tong duang dan

Niews/HelloWorld/Index.cshtml

Views P ea Account •

fib HelloWorld

ca Ideccshtnd

D GI Home

p GI Shared

_ViewStarLcsidnd

wth.config

N (cid:9)

GobeLasor Web.config

Binh 1.23 Minh hpa them moi mijt View - 3

Trang 31/109

Chuang 1- Tong quan ye ASP.NET MVC FRAMEWORK

Nfii dung ala file Index.cshtml vita duqc tso

VieSag.Title 'Index";

Index

Ta sea lsi nqi dung thinh It

Vieweag.Title • 'Index";

Index

Hello from our View Templatelqp

Chu chuang trinh ye duet kit qua nhu saw

My MVC Application

Home

Index

Hello from our View Template!

Huth 1.24 Minh hpa thin Si mot View - 4

Trang 32/109

Chuang 1- Tong quan ye ASP.NET MVC FRAMEWORK

1.4.8.6. Them mot Model

Trong solution explorer, click phiti chuOt tree thu mac Models, Chan Add, vi sau do

Chan Class.

O tt: D i Preprints N a References APP-De D A Caren D Cortrolins

Can

(cid:9) to Wdn Antabon

Pa

• Zausa

Cb$.9St+A

AS . (cid:9)

.

Sfult•ANA

Weds Pa Project

kallacet mixing

j Maw ben- a biding ken— CS Oho Fat

AMMIJET MIS (cid:9)

alkx Cni•C cbtof

1 41$ Cho— (cid:9)

oat

A Ca o 4b ow (cid:9) a Pa (cid:9) X (cid:9)

flush 1.25 Minh km thins mai moat Model

Sau dd, ta dit ten cho class va him OK de holm tit.

Nhu v$y, chting ta di co ban nim &roc cach tao mOt du in MVC, tech bien djch vi

chay chuong trinh. Ben canh 116, cluing ta rung di tim hieu so qua ve cich them oic

controller, view va model vio tong da an.

Trang 33/109

Chuang 2 - Cac thanh phan chfnh caa ASP.NET MVC

CHIMING 2 - CAC THANH PHAN CHINH CiJA ASP.NET MVC

2.1. Controller

Trong MVC, controller la cac lap C# (thubng dirge bat nguen tir lop

System.Web.Mvc.Controller). Mai phuong thirc public dm met class tir Controller duct goi la action method, n6 lien ket veri ciu hinh URL thong qua he' thing djnh tuyen

(routing system). Khi met yeu cau dirge girl tei URL lien ket v6i met action method,

controller se thao tic vei model vi chip ra View de hien thi cho Ichich hing.

ControllerBase la lerp co bin dm controller. NO cung cep cach xir ly MCV noi chung.

Cac lop ice thin tir ControllerBase dirge mac djnh thuc hien cac tinh chat cia met controller.

Lop Controller co nhOng vai tre sau:

- Dinh vi action method thich hop de goi vi xic Stan rang action method de co the

dugc gqi tai;

Nhan cac gia trj la tham so cim action method; Xt'r ly tat ca cac lei c6 the xiy ra trong qua trinh thuc hien cac action method;

Cung cep 16p WebForm ViewEngine mac djnh de' dua ra cac View.

2.1.1. Cie 167 chinh cilia Controller

Action methods: Mei action method ling veri met dja chi URL phan biet va dirge goi

ra vai cac tham s8 dirge ley tir you eau.

- Action results: Action method tra ye the hien dm met lop dugc dan xuat tir ActionResult. Lop ActionResult li nen tang cho moi ket qui dugc tit ire (VD: Tra ire met View, clan xuet den met Action method khic...). Viec tach bach giaa xac djnh ket quA va thuc thi se don gian h6a vice kiem thir met each ding ke.

- Filters: Chung to co the gei gin cac hank vi tai sir ding dugc thinh N loc, sau do dinh harth vi d6 vio met hocnhieu Controller hoac Action method bang cach Qat

[Attribute] vio trong ma nguen.

Trang 34/109

Chwmg 2 - Cac thanh phIn chinh nia ASP.NET MVC

2.1.2. Action Method

Thuang la su anh xa 1-1 di veri twang tac cita nguai dung. Vi du ngueri dung twang

tac voi trang web bing viec giri met dja chi URL, click vao met dui:mg link, hay xic than met form...MOi hanh di:mg do deu girl met yeu cau den Server. 6 mot twang hqp, cac you cau nay trong .NET MVC deu gqi met action method twang (mg.

MOt controller co the chira nhieu action method ma no can.

Khi ngtrai dung thut hien met yeu cau URL den hang web tren nen .NET MVC thi

may chit se thut hien chuyen huerng URL theo cac lust di duqc quy djnh trong file

Global.asax de tien hanh phin tich chuoi URL va quyet dinh sd xir 12 a Controller nao.

Sau d6 Controller se quyet dinh gqi Action method nao de xir 12 yeu cau.

Khi ngutri dung nh$p URL vao trinh duyet, img dung MVC se sir dung cac quy tic djnh tuyen duqc dinh nghia trong file Global.asax de phfin tich cac URL va XiC dinh duemg di cita controller. Sau do, controller xac djnh action method thich hqp de xir 12 cac

http://sunflower.com/MyWebSite/products/Categories.

yeti au. Theo mac dinh, URL cita met yeu au duce coi nhu la nhu men throng din Au bao gam cac ten controller nil den ten hanh gang (action). Vi du, neu ngtreri dung nhap vao URL la:

Nguyen tic djnh tuyen mac djnh coi "Products" img veri ProductsController. N6 coi

"Categories" la ten ctia action method. Vi voy, action method "Categories" cita ProductController se duqc gqi de xi! 12 yeu cau. Neu URL kelt thfic bing /Products/Detail/5, thi nguyen tic djnh tuyen mac djnh se gqi action method Detail els

ProductController de xir 12 you cau. Theo mac djnh, gia tri "5" trong URL duqc coi nhu la tham so cim action method Detail.

Trang 35/109

Chuang 2 - Cac thanh phln chinh caa ASP.NET MVC

Vi du ve met 16p controller c6 chin action method Helloworld:

public class NyController : Controller {

public ActionResult HelloWorld() {

'Hello World!";

Viewoata["Message"] (cid:9) return View();

1

2.1.3. Cac kEt qui tri ve kigu ActionResult

Cac ket qua tri ve tir action method deu ke thin tir 16p ActionResult. Tuy nhien, c6

nhieu loai tra ve khic nhau, tiny thuec vao nhiem vg ma cac action method thin hien.

Trong de, ph6 hien nhat 11 View method. View method tri ve met the hien dm 16p ViewResult, c6 nguon gac tir ActionResult.

Bang duel day het ke cac loai ActionResult :

lion

laid

ViewResult View Tri vi met trang web

). (cid:9) . PartialViewResult PartialView Tri ve met vung caa trang web

RedirectResult Redirect Chu yen' Song ve 1 trang web !chic

RedirectToRouteResult RedirectToAction Chuyin hung an met action method khic

RedirectToRoute

A ContentResult Content Tri ve met content type do ngtrai sir dung tu

at

JsonResult Json Tr& ve a lieu dang JSON

Trang 36/109

JavaScriptResult JavaScript TM ve 1 down Java Script

Chwcmg 2 - Cac thenh phIn chfnh caa ASP.NET MVC

FileResult

File

TM ve dii lien nhj phan

EmptyResult

(None)

Tni ye de lieu clang rang

Controller truy cap de lieu den, ching hen nhu gia trj chuOi truy van, gia trj form, vi the

tham so duqc phan tich tir URL thong qua djnh tuyen. Co 3 each chinh de truy cap de lieu:

- Chiet xuat tir mOt tap cac Context Object.

- C6 de lieu truyen nhu la mQt tham sic) dm action method.

Dan ra unit nang model binding coat framework.

2.1.4. Nkin cac au van

Day la each true tiep nhat de gie de lieu rai My no. Khi chang ta to ra mOt controller bat nguOn tir 16p Controllerbase. Ch'ing ta co the truy cap vio mOt tap hop cac thuOc tinh thmin tien a tiep can th8ng tin you clu. Nheng thuOc tinh nay bao glim Request, Response, RouteData, HttpContext, va Server. Mai thuOc tinh cung cap thong tin ye cac khia canh lchic nhau cua yOu ciu. Gin la thuOc tinh the tien vi n6 lay ingi 1o3i de lieu Ichac nhau tir ContextController cua you au (c6 the duqc truy cap th8ng qua Controller.ControllerContextproperty). Dudi day la cac Context Object thutong dung:

ThuOc firth

a. Context Object:

Request.QueryString

NameValueCollection

Lodi Mtl ti

Cac bien GET duqc giri tai you ), Call nay.

Request.Fonn

NameValueCollection

Cac bien POST dugs gin tai yeu

cau nay.

Request.Cooldes

HttpCookieCollection

Cookies duqc gin bin trinh duyet

(browser)

Request.HttpMethod

string

Phuang Mac FITTP (ching him

nhu GET hoar POST) duce sir

dung cho you cAu nay.

Trang 37/109

Chtrcmg 2 - Cac thanh phIn chinh cua ASP.NET MVC

Request.Headers NameValueCollection Toin b0 cac header HTTP girl di

vai yOu au nay.

Request.Url Url URL duqc you cau.

Request.UserHostAddress string Dja chi IP cna ngubi sir dung tao

ra you cau nay.

RouteData.Route RouteBase

Cac mile RouteTable.Routes duqc chqn cho you cau nay.

RouteData.Values RouteValueDictionary

Tham st, hoot dung djnh tuyen (Ity tir URL hoac la gia trj mac

dinh).

HttpContext.Application

HttpContext.Cache HttpApplicationStateBase Luu Ire trong thai Ung dung. Cache Luu tit be nha dem img clung.

HttpContext.Items !Dictionary

Lutz tie tiling thai cho yeti au high tai.

HttpContext.Session HttpSessionStateBase Luu tit tong thai cho phien lam

viec cilia ngubi lruy cop

User IPrincipal Thong tin xac thirc ve ngubi &mg

da (tang nhap.

TempData TempDataDictionary Cac du lieu tom thai duqc ltru trey

cho ngubi dung hien tai

. Su ayng cac tham so c on method:

Action method c6 the nhan cac tham so. Day la mut cach gqn gang han de nhon de

lieu den so vai chiet xuat theo cach thu cling tir cac Context Object. Dieu nay lam cho viec dqc cac action method tra nen de ding.

Mac djnh, gia trj cua tham se dau vao duqc nhan trong tap hap de lieu coa you cau, bao gem mOt cap ten/gia trj cho moi de lieu form, gia trj chuoi query, gia .trj cookie. Controller djnh vi cac action method vi xric djnh cac gia tri tham so cho action method,

Trang 38/109

dqa vao RouteData instance va dua vao de lieu form.

Chuang 2 - Cac thenh phAn chinh cfaa ASP.NET MVC

Neu MVC Framework khong tim they gia trj cho tham so kieu tham chieu (vi du nhu mat chuOi string hay Object), action method yin duqc gqi , nhung sir dung than se kieu null. Can neu Icheng tim they gia trj cho tham se kieu gia trj (vi du nhu int hay double), mat ngoai le se duqc nem ra va action method se lcheng duqc gqi.

C6 mat s6 each de truy cap cac gia trj tham s6 URL tong cac action method ciia 16p Controller. Lep Controller cho thAy thuac tinh Request va Response th the duqc truy cap bang mat action method. Nhang thuOc tinh nay co neu nghia giOng yeti tic &Ai tucmg HttpRequest va HttpResponse (da la mat phttn cua ASP.NET ).

Vi du clued day cho thay each ma dal ttrqng Request lAy gia trj mat churn string "id".

publicvoid Detail()

{

int id = Convert.ToInt32(Request["id"]);

}

ASP.NET Framework c6 the to Clang inh xa gia trj tham s6 caa URL tam gia trj tham se cila action method. Mac dish, neu mat action method c6 mat tham s6, MVC Framework se Idem tra dft lieu you cau va xic djnh xem c6 you cau nao chira mot gia trj HTTP yeti ten gibing nhu the khong. Neu c6, gia trj cua you cau se duqc truyen vat) action method.

Vi du duei day, tham se "id" duqc gia djnh anh x; tea mat gia trj request cling c6 ten

la "id". Anh xa nay la tu clang.

{

public ResultAction Detail(int id)

ViewDatarDetailInfol = id; return View();

}

Chimg ta cling c6 the nhOng cac gia trj tham s6 nhu mat phan tha URL thay vi nhu cac gia trj caa chutli truy van. Thay vi sir dung cac URL vai mat chuSi truy van nhu

Trang 39/109

/Producst/ Detail? Id = 3, ta c6 the sir dung mat URL la /Products/Detail/3. URL nay duqc quy djnh trong file Global.asax va c6 d?ng / (controller) / (action} / id).

Chuang 2 - Cac thanh phlr. chfnh cda ASP.NET MVC

MVC framework cling hO trq tham so tily chip cho the action method. Tham se thy chin

duct xi' ly bing each sir dung tham so kieu nullable. Vi du:

public ActionResult ShowArticles(DataTime? data)

if(!date.NasValue)

date = DateTime.Now;

}

C vi du ten, tham se diu vio la ki6u ngly thing, nEu khong co tham so thi mic dinh

tham se se li ngiy hien tai.

2.1.5. Filter

Doi khi cluing ta muen thgc hien logic 6 met hoic nhcmg thai diem sau day: truck vi sau khi action method dugc goi, truck vi sau khi ActionResult dugc ggi, hoic khi cic ngoai le dugc nem ra tron img dung cita chting ta. BE h6 try diet' nay, ASP.NET cung cap cho cluing ta cic filter (be loc).

Co ben kieu filter ca bin. MIA kieu se co logic tai nhftng thin diem khic nhau

Trang40/109

tong qui trinh xir ly you ciu.

Chuang 2 - Cac thanh phan chfnh coa ASP.NET MVC

Authorization

lAuthorizationFilter

Clay tram tien,

truerc tit ca nhfing

filter !chic ho*c (cid:9)

phuong thIrc action.

AuthorizeAttribute

Ding de chimg thuc

cac user hien tai xem

c6 dii quyen hp hay

kheng.

Action

lActionFilter

Chay tnroc va sau

ActionFilterAttribute

action method duqc

gqi

Result

IResultFilter

aay tru6c va sau

ActionFilterAttribute

action result duqc gqi

Exception

TExceptionFilter

Chay khi co cac

HandleErrorAttribute

ngoai le ben trong

ling dung.

Men filter Interface Thyt thi m$c dlnh MS to

Be loc c6 the ap dung cho tong action method rieng bi'et hay cho wan be controller.

Vi du sau chi mg to ap dung filter Authorize cho tong action.

- (cid:9) p dying filter cho controller vi action method

namespace SportsStore.WebUI.Controllers {

public class AdminController : Controller {

[Authorize]

public ViewResult Index() {

if (IRequest.IsAuthenticated) {

FormsAuthentication.RedirectToLoginPage();

}

}

[Authorize]

public ViewResult Create() {

Trang41/109

Chuang 2 - Cac thanh phn chiral ctia ASP.NET MVC

if (IRequest.IsAuthenticated) {

FormsAuthentication.RedirectToLoginPage();

}

}

}

}

Chang ta co the tip dung nhieu filter tren ding mOt action. Ngoai ra, chang ta ciing c6 the trOn lin gift viec loc a nhieu cap dO tfr cep dO lop den cep dO phuong thfrc action nhu vi du dual day.

[Authorize(Rolesetracler")] If applies to all actions public class Examplecontroller : Controller {

[shadiessage] [outputcache(ouration.60] public ActionResult Index()

}

Sfr dung filter Authorization

Filter Authorization chay truer tat ca cac filter khac va truck khi action method duqc goi. N6 bio dam rang nhfing phuong thirc action ducc goi 136i nhUng ngtroi clang duqc cho ph6p. BO icc Authorization thoc thi AuthorizationFilter interface.

namespace System.Web.Mvc {

public interface IAuthorizationFilter

{

void OnAuthorization(AuthorizationContext filterContext);

}

}

Sfr dung Authorization Filter c6 sin

MVC framework tich hop mOt c6 sin authorization rat htu ich, goi 11

AuthorizeAttribute. Chung ta cif) the chi dinh authorization bang 2 tinh chat dm 16p My.

Ten

Men

Users

String

Ma to Danh sach nhang cai ten duqc phop truy xutt vio phuong thfrc action. Cac username each nhau Uri clau phay

Trang 42/109

Roles String user muOn truy xuttt vao duct nhOng phucmg thirc action, thi role cite

user pith nim trong danh sitch nay

t (cid:9)

"

' V:

Danh sach nhUng ten role. Cac ten role cach nhau ben dAu phay. Neu

[Authorize(Users="adam, steve, bob", Roles="admin")]

public ActionResult Index() return View(); Lop AuthorizeAttribute cung cap cho chimg to 2 diem tay bien: Phuong thirc AuthorizeCore, dirge goi tar AuthorizeAttribute va thirc hien kiem tra xac thvc.

- Phircmg thirc HandleUnauthorizedRequest, ductc goi khi kitm tra xac thvc thAt bal. Sir dyng cac exception filter

{

Cac exception filter phai thvc hiOn IexceptionFilter interface. namespace System.Web.Mvc

public interface IExceptionFilter {

void OnException(ExceptionContext filterContext);

}

}

Si dyng Exception Filter co sin

HandleErrorAttribute la stir thvc thi co sin cite lExceptionFilter interface vit gulp cho viec tao cac exception filter a clang hon. Bang dirth day m8 to cac ihu6c tinh cim HandleErrorAttribute.

Ten Lodi MO to

ExceptionType Type Cac Ideu ngoai le xir 1Y beri be ]pc nay. N6 cling

se xir ly

cac kieu ngoai le ma ke thin tar cac gia tri quy

djnh, nhung se

b6 qua tat ca nhang thir !chile. Gia tri mac dinh

li System.Exception,

Trang 43/109

c.6 nghla la no se xir IY Wit ca cac ngoai le ch 'uan.

Chuang 2 - Cac thanh phin chfnh cAa ASP.NET MVC

View

string

Ten ciia View ma filter se din den. Neu to

khong chi djnh gia trj cu the, no se nhan gia trj

mac djnh cita Error, do la

NiewskcurrentControllerName>/Error.cshtml

or

Niews/Shared/Error.cshtml.

Master

string

Ten caa layout se sir dung khi din ra met

view. Neu kh8ng co gia trj cu the, no se nhan' layout mac djnh cim MVC.

[MandleError(ExceptionType=typeof(NU11ReferenceException),View="SpecialError")] public ActionResult Index()

- Sfr dyng cac action vi result filter

Action va result filter phai thut hien giao din lactionFilter.

namespace System.Web.Mvc { public interface IActionFilter {

void OnActionExecuting(ActionExecutingContext filterContext);

void OnActionExecuted(ActionExecutedContext filterContext); }}

Giao din nay djnh nghia 2 phuong thirc. MVC Framework gqi phuong thirc

OnActionExecuting truck khi gqi action method. Va no gqi phuong thtic OnActionExecuted sau khi action method &I &roc gqi.

Sty dyng cac action vi result filter co sin

MVC Framework bao gam melt lop co sin de too ra cac action va result filter. Nhung

khac yr% authorization va exception filter co sin, no kh8ng cung cap cac tinh rang hfru ich.

Lop d6 Eli la ActionFilterAttribute, nhu dudi day.

public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter{

public virtual void OnActionExecuting(ActionExecutingContext filterContext) (}

public virtual void OnActionExecuted(ActionExecutedContext filterContext) (}

public virtual void OnResultExecuting(ResultExecutingContext filterContext) (}

public virtual void OnResultExecuted(ResultExecutedContext filterContext) {} }

Trang 44/109

Chtrcmg 2 - Cac thanh phAn chinh ctia ASP.NET MVC

- Sir dyng mi)t so filter c6 sin

MVC Framework cung cap met s6 filter c6 sin de sin sang sir dung cho cac img dung.

Filter

MO to

RequireHttps

Thuc thi viec sir dung giao thirc HTTPS cho

cat action.

OutputCache

Luu tzi) cac dAu ra tir met action method.

ValidateInput and

Authorization filters lien quan den an ninh.

ValidationAntiForgeryToken

AsyncTimeout

Duet sir dung vai cac controller 'Meng Bong

b0•

NoAsyncTimeout

ChiklActionOnlyAttribute

Authorization filter NI My cac phuang thirc

helper Html.Action va Html.RenderAction.

2.2. View

Trong me hinh web Ong thi View la phAn hien thi trang web. Ve met ban chAt, View la

met file HTML to chin the (top code (the tag <% %> del vai aspx, @ del veri razor) qua server xir 15, de tra ve cho trinh duyet (browser) de hien thi.

Thong qua cac action method 6 Controller, View duce tra ve cho ngubi dung.

2.2.1. Khai niem ViewEngine

View Engine chju teach nhiern ttuyen down code HTML dr cat View den trinh duyet. View

Engine Template se ca nheng miu ca phap khac nhau de thus thi.

Hien nay ca met se loyi ViewEngine trong MVC Framework. Trong se do, Razor duqc

coi la ViewEngine tat &tit.

Razor la met ViewEngine lien tien cit.% Microsoft, xuAt hien tin phien ban ASP.NET MVC3 (1/2011). HAu nbu cat chirc nAng ma MVC yeu ciu deu c6 sin tong Razor. Razor

duqc biet den nhu la ViewEngine men de thay the ViewEngine cif (ASPX hay Web Forms

Trani; 45/109

2.2.2. Gi64 thieu ye Razor

Chuang 2 - Cac thenh phAn chinh ctia ASP.NET MVC

Engine). Chang ta vin c6 the tiep toe sir dung ASPX View Engine nhung tuong lai cira View Engine chinh la Razor.

Cie try diem cirri Razor

- Gon nhe, xac tich, de clang: Razor gram thieu s6 luqng lcy ti, t6 hop phim can thiet cho mOt tap tin, va cho phep luang c8ng viec duqc thyc hien de clang. Razor !thong

you eau chimg ta phai dang g6i cac dorm code met each rO rang, no duot phan tich

met each thong minh de xitc djnh xem dau la phan hien thi, dau la plan code.

- Tim hieu de clang: Cho ph6p chting ta nhanh chong tim hieu veri nhOng khai niem tai

Khong phii la met ngon ng0 mei: Chung ta c6 the sir dung nhOng nen ngtt co sin

nhu la C #, VB,... von Razor, va hoi try cac kjr thuat HTML met cach tuyet val. - Lam viec voi moi trinh soon thao van ban: Razor ichang dor hoi mOt trinh soon thito

van ban cu the nio.

- HO trq thin nghiem (Unit Testable): HO try kha ming iciem tra cac View ( Ichang yeu

c'au Controller hay Web-Server) .

Ca phip: Bat dau mOt khoi lenh bang kYttr @. Khac vai ASPX sti dung <% %>,

Razor kheing yeu cau lcy to dung Ich6i lenh

2.2.3. Them nOi dung dung cho Razor View

NOi dung (long duce to ra tong lac choy, mai lac khic nhau dry theo yeu eau. N6 nguqc loi vei net dung link ching hen nhu HTML (nOi dung lain hien thi nhu nhau von moi you au). Chimg ta c6 the them nei dung dOng theo met s6 each duOi day Ky that Khi can sir dung

Inline code

Sir dung cho cac phan nh6, khep kin cilia view logic, vi du nhu la lenh if va foreach. Day lic8ng co ca ban de to ra nOi dung

deng trong View, va mOt s6 each tiep can 1 Ichic duyc lay dung ten no.

Cac phucmg thirc HTML Dimg de too ra cac thank phial HTML dam 16 hoar met be cac

Trang 46/109

helper the HTML, thubng dimvac) View Model hoac gia tri View

Chtro'ng 2 - Cac thank phAn chinh cua ASP.NET MVC

Data. MVC Framework tich hop met so luting phuong that

HTML helper nit Mu ich. Bat cu phuang thirc tra ve met doi

Partial views

aging MvcHtmlString deu la HTML helper. Sir dtmg de chia se ac phan phu gicra cac View. Partial view co the chira inline code, cac phucmg thirc HTML, vi lien ket toi cac

partial views khic. Partial view khong din ra met action method,

vay nen no khong the dung de thuc hien cac nghiep vu logic.

Child actions Sir dung di 40 giao digs, cac thin tai sir dung dugs ma an china

nghiep vu logic. !Chi chang ta sir dung child action, no dln ra

met action method, tra ve met view vi truyen kat qua vac, luting phan ting.

223.1. Si? dyng Milne code

Cach dun giin What vi de clang nhat de tao nei dung (ging la sir dung inline code — met

hoac nhieu lenh C# bat du bang k9 to @ (II trong tam cim Razor ViewEngine).

2.2.32 Sir dyng HTML helper

Met dieu can thiet chung do la tao ra ding met khoi HTML lien tuc trong met view. MVC Framework cung cap met ca the gpi la HTML helper de giitp chung ta lam viec met cach hieu qua. a. T3o mOt HTML helper co sin

Cach true tiep St de tat met helper trong View la sir dung the @helper caa Razor. Vi Du:

ViewBag.Title = "InlineHelper";

}

PeXper CreateList(string[] items)

{

Iforeach (string item in items)

{

Trang 47/109

Chuang 2 - Cic thenh phAn chinh (cid:9)

ASP.NET MVC

InlineHelper

Days of the week:

greateList(ViewBag.Days)

cp />

Fruit I like:

greateList(ViewBag.Fruits) Wine helper c6 ten va tham so hrcmg ty nhu phuong thirc C# th8ng thuerng. d vi du ten, chung ta djnh nghia met helper pi la CreateList, ray met ming sting lam tham so. Diu ra duce hien thj nhu sau:

(cid:9)

bind*:Iper

¤ px

htlp://locelhose1223/MotnefinfineHeiper

!nineHelper

Days of the week:

• Monday • Tuesday • Wednesday • etc

Fruit I like:

• Apples • Mango • Banana

Ilinh 2.1 Minh hpa tpo meit lnline HTML helper

Chung ta ggi helper 2 lin trong View de taco ra met cep danh sach. Neu khang c6 helper, chUng ta phat sao chap HTML vi yang lip foreach cho mAi danh sich yeu ciu. Mk du helper tong giting met phuang thirc, nhung no khOng co gia tri tra ye. Nei dung ben tong helper duet xir ly va dap img yeu cau cia Ichich hang.

Trang 48/109

Chuang 2 - Cac thanh phan chfnh ctia ASP.NET MVC

b. Tno met pinrung fink helper bin ngoil:

Inline helper nit thuen tien, nhung no chi duqc sir dung trong View ma no duqc khai bio.

Neu no bao (cid:9) qua nhieu code, View se IMO de dqc. Met cach Plat la tao ra phucmg thirc

HTML helper ben ngoai, duqc the hien nhu met phuang thirc C# ma reng.

Vi

NOi dung Gila file CustomerHelpers.cs nhu sau:

using System.Web.Mvc;

namespace HelperMethods.Infrastructure

{

public static class CustomHelpers

{

public static MvcHtmlString ListArrayItems(this HtmlHelper html, string(] list)

{

TagBuilder tag = new TagBuilder("ul");

foreach(string str in list)

{

TagBuilder itemTag = new TagBuilder("li");

itemTag.SetInnerText(str);

tag.Innerittal (cid:9)

itemTag.ToString();

}

return new MvcHtmlString(tag.ToString());

}

}

Phucmg thirc helper chimg ta vita nto co chtic ming giOng nhtr inline helper a vi dm twat.

NO than met ming string va tao ra cac the ul cis HTML, co chita li cho mOi chuai cita ming. Tham sit) ctiu lien la met dei tuqng HtmlHelper, bat diu bang tir khoa nay de trinh bien djch C# bier duqc citing ta clang djnh nghia Mot phucmg thirc ma rOng. HtmlHelper cung cap

quyen truy cap vim nhang thong tin heu ich !chi two nei dung, thong qua cac thueic tinh mo ta trong bang duat day:

Thu& tinh Me ta

RouteCollection Tra ve tap hqp cac tuyen throng quy djnh beri ting dung

Trang 49/109

Chuang 2 - Cac thanh phAn chinh ctla ASP.NET MVC

ViewBag

RA ve chl lieu view bag duqc truyen tir action method toi view, pi bang phuongthirc helper.

ViewContext

Tra ve d6i ttryng ViewContext, cung cep viec truy cap den chi net dm yeu eau va cach ma no dugs xir 19. . (cid:9)

day

_ au y a mat so upc (cid:9) nghia boi lop ViewContext) thuimg dirge sir dung:

Thuac tinh M8 ta

Controller Tr* ve controller xir 19 yeu cau hien mi.

HttpContext Tra ye dei Wong HttpContext ma mo ta you cau hien tai.

IsChildAction

RouteData

View

Tri ye true neu View ma pi helper dugs tra ve bei child action. TM ve du lieu djnh tuyen cho you du. Tra ve mat the hien cis IView ma gqi phuong thirc helper. . (cid:9) _

Chung to khong can thong tut ve yeu cau o vi du ve phuong thirc helper ben ten, nIumg chling ta can phiti 'thy dung cac phen tir HTML. Cach de ding that de to HTML trong phuong

thirc helper la sir dung lop TagBuilder. NO la mat phan ciut SystentWeb.WebPage.Mvc nlitmg

sir dung mat tinh ming nhu the la mat phen cua System.Web.Mvc. Chang ta khong can phai

sir dung deu ngoac nhon () doi vet lop TagBuilder. Vi du:

TagBuilder tag = new TagBuilder("u1");

MOt se thanh phin dm lop TagBuilder:

Thanh phan Mo to

InnerHtml

Cho phep chimg ta thiet lap nhemg nat dung Gila phin tir nhu mat chuOi HTML. CtIC gia trj dm thuac tinh khong duqc ma Ma.

SetIrmerText(string) Thiet lap nai dung ciia phan tir HTML. Tham se string dirqc ma

hoa de cho an town khi hien thj.

AddCssClass(string) Them CSS cho HTML

MergeAttribute(string, Them mat thuac tinh vim HTML. Tham se deu tien la ten dm

string, bool) thuac tinh, thaw se thu hai la gia trj. Tham so bool de xac dinh

neu eon tai thuac tinh Wing ten thi nen thay the.

Trang SO/109

Chuang 2 - Cac thenh phn chinh cua ASP.NET MVC

Ket qui tri ve cim phuong thirc HTML la mOt dei tucmg MvcHtmlString. CS vi du ben tren, ta truyen ket qui cim phtrang thirc TagBuilder.ToString tai met dei tuqng

MycHtmlString mai.

return new MucHtmlString(tag.ToString());

c. Si? dyng HTML Helper có sin.

Hai tong s6 nhilng helper duqc sir dung nhieu nhAt lit Html.BeginForm vi Html.EndForm.

Cic helper nay Mo ra cic the form HTML. Vi du clued day cho they vies sir dung nhang helper

nay.

To cic form

11Html.BeginForm("Index", "Home");}

Html.EndForm();}

Kh8ng cii nio tong sit) nhang helper nay tra ve giit trj ma co the truyen true tiep cho (tau

ra, ta can phii gqi ching ben tong Ichei lenh Razor, lim cho cu phip to nen xau xi. Met each dip c

{

}

Doan code ten tucmg tu yeti

BeginForm helper do the qui tai, dirge dun ra tong bang clued day:

Qua tai

M6 ti

BeginForm0

Tao met form ma gth lai cho action method ma no ce bit

x nguon.

BeginForm(action,

Tao met form me giri Mi cho action method vi controller

controller)

duqc xic djnh cu the bing chum string

BeginForm(action,

Gieng phuang thirc qui tai phia tre'n, nhung cho phep chting

controller,

ta chi djnh gii ti cho thuOc tinh phuong thirc bang each sir

method)

dung gii tri to System.Web.Mvc.FormMethod

BeginForm(action,

Giong phuong fink qui tai phia ten, nhtmg cho phep cluing

controller,

ta chi djnh nhemg thuOc tinh cho form, mOt 86i Wang cif) cic

Trang 51/109

Chuang 2 - Cac thanh phIn chinh cua ASP.NET MVC

method, attributes) tinh chat duqc sir dung nhu ten thu6c tinh.

BeginForm(action, Giong phuong thirc qua tai phia'trim, nhung cho phtp thing

controller, to chi djnh cac phan down djnh tuyen trong cau hinh img dung

routeValues, method, djnh tuyen, nhtr met d6i tucong c6 cac tinh chat ttrcmg {mg v6i

cac Bien Binh tuyen.

attributes) . _ .. (cid:9) eau:. @mode“elperMethods.Models.Person

ViewBag.Title • "CreatePerson";

}

CreatePerson

(fusing (Ntnl.BeginForm("CreatePerson", "Home", new { id • "MyIdValue" },

FormMethod.Post, new { class • "personClass", data_formType • "person" }))

{

PersonId

clabel>Last Name

}

Vi du tren tut:mg to vOi down code trong HTML nhu sau:

ipos

Trang52/109

Chuang 2 - Cac thank phin chfnh caa ASP.NET MVC

Sir clung Input helper

Bang ducid day the hien nhOng phuong thirc helper co ban c6 sin a tiao ra cat input va

met s6 vi du HTML.

Minh Sian HTML

Vi dv

Checkbox

Html.CheckBox("myCheckbox", false)

Output:

value="true" />

Hidden field

Html.Hiddenrmyllidden", "van

Output:

value="val" />

Radio button

Html.RadioButton("myRadiobutton", "val", true)

Output:

name="myRadiobutton"

type="radio" value="val" />

Password

Html.Password("myPassword", "val")

Output:

value="val" />

Text area

Html.TextArea("myTextarea", "var, 5, 20, null)

Output:

Text box

Html.TextBox("myTextbox", "val")

Trang 53/109

Chuang 2 - Cac thenh phin chinh cila ASP.NET MVC

Output:

value="val" t>

Si? dyng Strongly Typed Input Helper Bang chnfri day cho thay nhUng strongly typed input helper co ban va mOt so vi du HTML.

Thanh phan HTML

Vi du

Checkbox

Html.CheckBoxFor(x => x.IsApproved)

Output:

value="true" />

Hidden field

Html.HiddenFor(x => x.FirstName)

Output:

/>

Radio button

Html.RadioButtonFor(x => x.IsApproved, "van

Output:

value="val" />

Password

Html.PasswordFor(x => x.Password)

Output:

Text area

Html.TextAreaFor(x => x.Bio, 5, 20, new { })

Output:

Text box

Html.TextBoxFor(x => x.FirstName)

Output:

Trang 54/109

Chuang 2 - Cac thenh phn chfnh can ASP.NET MVC

To cac thinh phin Select

Bang dueri day the hi'en namg phucmg thirc helper ma c6 the sir dung de tfio ra cfic

thanh phin Select.

Thanh phan HTML

Vi du

Drop-down list

Html.DropDownList("myList", new SelectList(new [] {"A", "B")),

"Choose")

Output:

Drop-down list

Html.DropDownListFor(x => x.Gender, new SelectList(new 0

{"M", "F"}))

Output:

Multiple-select

Html.ListEiox("myList", new MultiSelectList(new [] {"A", "B")))

Output:

Multiple-select

Htnil.ListBoxFor(x => x.Vals, new MultiSelectList(new [] {"A",

ow}))

Trang 55/109

Chuang 2 - Cac thanh phAn chfnh nia ASP.NET MVC

Output:

To etc link vi cic URL

Bang duel My the hien nhftng HTML helper cho phop cluing to Ira ve HMTL link vi

URL.

Meta

Vi dm

Application-relative

Url.Content("—/my/content.pdf')

URL

Output: /my/contentpdf

Link to named

Html.ActionLink("Hi", "About", "Home")

action/controller

Output: Hi

Link to absolute

Html.ActionLink("Hi", "About", "Home",

URL

"https","www.example.com", "anchor",

new{}, null)

Output:

href="https://www.example.com/Home/Aboutlianchor >Hi

Raw URL for

Url.Action("About", "Home")

action

Output: /Home/About

Raw URL for

Url.RouteUrl(new { controller = "c", action = "a" } )

route data

Output: /c/a

Link to arbitrary

Html.RouteLink("Hi", new { controller = "c", action = "a" }, null)

route data

Output: 11i

Link to named

Html.RouteLink("Hi", "myNamedRoute", new {})

route

Output: Hi

u ra cua nhftng helper nay phy thuec vao cau hinh djnh tuyen cua img & sing MVC.

Trang 56/109

Chtrang 2 - Cac thanh phan chfnh cola ASP.NET ?VC

2.2.3.3. SI? dyng Section

Razor Engine hg trq !Mai niem Section, cho phip chung to cung cap cac vimg cua layout. Razor Section gulp Urn soit tot nhang phan dm View duqc chin vio layout hay nhUng nth ma chi mg duqc dat. Vi dp sau djnh nglita mot Section:

ViewBag.Title = "Index";

}

This is the view

ieittioe , Hoader { Iforeach (string str in new [] ("Home", "List", "Edit"})

IHtml.ActionLink(str, str)

}

<114>This is the view between the header and footer sections

@section- Footer { 414>This is the footer

}

ch4>This is the view again

Con day la layout se sir dung section vim mo phia

<1DOC1YPE html>

type="text/css" I>

penderSection("Header")

This is the layout between the header and the body

Trang 57/109

Chtrcmg 2 - Cac thanh phn chinh nia ASP.NET MVC

(RenderBody()

This is the layout between the body and the footer

@RenderSection("Footer")

l/body>

Chang ta then nOi dung cita section vao layout bang RenderSection helper. Cac phan con

Gila View khong duqc chira trong Section lit c6 sin thong qua RenderBody helper. N6

then n6i dung tir bit cfr ch8 nio cila View ma !thong chi ra khei @Section.

Day la ket qua 6 layout.

Inds (cid:9)

pox

Mnx/flocaalotianit

Hs= Ltd Eck

This is the layout between the header and the body

This is the view

This is the view between the header and footer sections

This is the view again

This is the layout between the body and the footer

This is the footer

Hinh 2.2 Kit qua sti dung Section

Chit jr: Mtjt View chi co the djnh nghia the section duqc g9i trong layout. MVC

Framework se tang ra ngoai 1g neu chang ta c8 ging dinh nghia nhftng section ma kh8ng

turmg img NAM @RenderSection helper duor ggi trong layout

Kam tra mic Section

Chung ta co the ldem tra xem mOt View co djnh nghia section tir layout hay khong.

Day la cach hieu qua de cung cep nOi dung mac djnh cho section neu nhu View khong cung cep nai dung xic djnh.

Vi du sau kiem Ira xem section c6 duqc djnh nghia beri View hay khong. @if (IsSectionDefined("Footer")) {

@RenderSection("Footer")

Trang58/109

Chtrang 2 - Cac thanh phIn chinh atm ASP.NET MVC

} else {

<114>This is the default footer

} IsSectionDefined helper nhin ten ciia section muM hem tra va tra ve true neu View

ma chimg ta dang bieu dien dinh nghia section do.

Tra ve the section thy chon

MOt cach khic de kiem tra xem section co duqc dinh nghia hay khong de II Mo ra

section thy chon, nhu sau:

eRenderSection("Header")

This is the layout between the header and the body

penderSection("Body")

This is the layout between the body and the footer

fRenderSection("Footerm, false)

Voi viec truyen tham se false, cluing ta lam cho section thy chip khong bat buOc. Vi

the, layout se tich hop nOi dung neu section &roc dinh nghia, neu !thong no ciing se kh8ng bet ngoai re.

2.2.3.4. Stir dim Partial View

Partial View la nhung doan nOi dung co the tai sir dung va cac doan code co the nhimg vao nhang View khic, glop nang cao kha thing sir dung cua trang web, giam cac ma" rang

Tao mOt Partial View

Chang ta Mo Partial View bing cach click chuOt phai vio thu muc View, chon Add >

View va sau do chon vac) muc Create as a partial view.

Trang 59/109

Chuang 2 - Cic thanh phan chinh cue ASP.NET MVC

View name

MyPotial-

Vas engine

Et Crate a strongly-Wed view

Medd do a

1 L Suitakl Wapiti

[Empy__ (cid:9)

____ _ (cid:9)

_ _ (cid:9)

i, (cid:9)

[0 Reference script Manes

sa Cade n • putiohne• I] Use a layout or master page

r

1

(Lon empty' k is pet in • RaOLtherilallift

CententPleceHolder ID:

IiiinCentee.

I

WI.

Hinh 2.3 Tao nkit Partial View

Tri ve Partial View Cac phucrng thirc Partial, RenderPartial, RenderAction helper duct sir dung de tra ve

Partial View tong Razor.

ptml.Partial("_Conments")

pOtml.RenderPartiagm_Coments");}

Diem lchic biet chinh gifra 2 phucmg that phia ten la phucmg thirc Partial helper tra

lei partial view thinh mOt chugi. Trong khi phucmg that RenderPartial viet Ulm tiep vio

luting phan img thay vi frit ve mOt chugi.

WIttml.RenderAction("_Category","Home");}
Chu 9:

Phuong thirc Partial, RenderPartial duqc sir dung khi model dA duct diet day du thong tin. Vi du, trong mgt blog hien thj birth luon Cila bai viet, chimg to sir dung Partial hoc RenderPartial tir mOt thong tin c6 sin la bai viet 6 model.

Trong 60/109

Cturcmg 2 - Cac thanh phan chinh cua ASP.NET MVC

Phuong thirc RenderAction duqc sir dtmg khi thiing tin can duqc hien thj ar nhieu trang. Do do, partial view can co model rieng. Vi du, dash sach the loci cita bai viet o tat ca

cac trang, chinag ta nen sir dung phtrcmg thirc RenderAction.

223.5. St? dyng Child Action

Child Action la cac action method duqc gui tir ben trong View. Dieu nay ghip cluing

ta tranh viec trang lap controller logic ma sir dung 6 mot se not trong img dung.

Tgo m(it Child Action

Bit kjf action nio cling c6 the sir dung nhu la child action. Vi du dueri day bieu dies

Mc diem Gila child action.

[ChildActionOnly]

public ActionResult Time()

return PartialView(DateTime.Now);

}

ThUOC tinh ChildActionOnly dam bio ring mot action method chi co the duct g9i

nhu la child action ben trong View. Mot action method khong an thuijc tinh nay de trer thinh child action, nhung cluing ta co xu huting sir dung no a ngen chin cac action method duqc

den ra nhu ket qua tir you eau ctia ngubi dung. Sau khi djnh nghia action method, cluing ta ph& xac dinh nhang gi duqc trit ve !chi action duqc dln ra. Child action thtdmg duct kit hop yeti partial view, mac clit lchong bat buOc. Vi du ve Partial View de sir dung child action nhu sau:

model DateTime

The time is: .Model.ToShortTimeString(Wp> Trii vi mt)t child action

Chung ta c6 the den ra child action sir dung Html.Action helper. Vei helper nay, action method &Km thtrc hi 'en, ActionResult duqc xir ly , va dau ra duqc truyen cho phia client.

11{ Vieweag.Title = "Child Action Demonstration";

}

TYang61/109

Chuang 2 - Cic thenh pit chiral caa ASP.NET MVC

Th1s is the method rendered by the action method

OHtml.Action("Time")

This is the method rendered by the action method againqp>

Ket qua la

Chid Action Dernonststation (cid:9)

ir 0 X

http://localost.39309/Home/ChiclActionDeno

This is the method rendered by the action method

The time is: 19:47

This is the method rendered by the action method again

Hinh 1.4 Minh hpa kit qua Ira 4 mot Child Action. Vi du tree, ta sir dung mOt them so de cung cap ten coa action method se den ra.

Ngoai ra, chimg ta ding co the gi action method tit controller lchac bing viec cung cap them controller name, nhu sau:

@Html.Action("Time", "MyController").

2.3. Model

Trong ASP.NET MVC Framework, model chju trach nhiem cho phan lOi coa ring dung va cac tic vu lien quan den du lieu. Cu the la ket not den ca so der lieu va thirc hien cac thao tic tren dii lieu do. Model con co vai fro mo ta cac thuc the trong dui lieu, ket hqp

Trang 62/109

nhieu loci dU lieu yeti nhau theo yeu cau ciaa View. Ngoai ra con c6 the gin mgt model vao view de hien thj va xac Whin der lieu.

Chuang 2 - Cac thenh phAn chinh cua ASP.NET MVC

2.3.1. Model Binding

Model binding la qua trinh khoi tao dei Wong .NET sir dung der lieu duqc girl bang trinh duyet (browser) trong met you cau HTTP. MVC Framework phai atilt xa den chi tiet ciia yeti eau then each ma no co the truyen du lieu thich hop ho4c tham se dei Wong toi action method, sir dung model binder Sc djnh (DefaultModelBinder).

2.3.1.1. 71m hien y? Model Binding

Gia sir rang chting to dA djnh nghia met action method trong controller nhu sou: using System;

using System.Web.Mvc;

using MvcApp.Models; namespace MvcApp.Controllers

{

public class HomeController : Controller

{

public ViewResult Person(int id)

{

// get a person record from the repository

Person myPerson = null; //...retrieval logic goes here... return View(myPerson);

}

}

}

}Chi nhen met you cau cho URL nhtr Home/Person/23, MVC Framework phai anh xa chi tiet elm you cau bang each truyen met gia tri thich ho4c (lei Wong thich hop (tham se) tan action method.

Action invoker - thinh phen ma dam ra action method, chill teach nhiem co duqc gia tri

cha the tham se trthic khi no dam ra action method. Action invoker Sc djnh la

ControllerActionInvoker, duo vat) cac model binder — duqc djnh nghia bei giao diem ImodelBinder.

namespace System.Web.Mvc

{

public interface IModelBinder

Trang63/109

Chuang 2 - Cac thenh phin chinh cua ASP.NETC

{

object BindModel(ContllerContext controllerContext,

ModelBindingContext bindingContext);

}

}

C6 the c6 nhieu model binder trong met (mg dung MVC, mai binder co teach nhiem

rang buk met hoc nhieu loai model. 'Chi action invoker can gqi met action method, no nhin

vao tham se ma duqc method dinh nghia va tim model binder c6 nth nhiem cho mai loci

tham se. (3 truang hqp vi du ban ditu, action invoker se tim action method ma c6 met tham se

int, vay ne se xk djnh frith nhiem binder di rang buec gia trj int va gqi phuong thirc

BindModels cita no. Neu khong c6 binder nito hog deng bin gia tri int, model binder n* dinh se duce sir dung.

Met model binder co trach nhiem tao ra sac gia tri tham s6 action method phi' hqp. Dieu nay thuemg c6 nghia la chuyen dai thanh phin cua de lieu you cau (Sur la gia tri form

hoac chugi query), nhung MVC Framework khong dot gi6i han ve du lieu thu duqc.

2.3.1.2. Sir dyng model binder m4c dinh

Mac dumet ung dung co the c6 nhieu binder, nhung phan 16n deu clua tren lap

binder c6 s'an la DefaultModelBinder.

Default model binder se tim kiem theo bang duOi day.

Source

M8 tit

Request.Form Chita dff lieu form HTML.

RouteData.Values Gia tri djnh tuyen cac ling dung.

Request.QueryString De lieu tong chuai query cita URL. Request.Files Nhang tep tin duce upload nhu met phin dm yeu au.

. De tun mqt thaw so id":

• Request.Formridi

• RouteData.Valuesridi

• Request.QueryStringridi

• Request.Files["id"]

Trang 64/109

Chuang 2 - Cac thanh phAn chfnh caa ASP.NET MVC

Ring buec nhttng hien tham s6 don Win !Chi lim vier vbi nheng ldeu tham so don giin, DefaultModelBinder co ging chuyen doi gii tri churn mi dtrqc thu thip tir de lieu y8u eau sang kieu cita tham se, sir dung lop

System.ComponentModel.TypeDescriptor.

Neu gib tri khong the chuyen d61, vi du nhu chung ta cung cap gii trj kieu "Qui tio" cho tham s6 mi you ciu co gii tri kieu int, DefaultModelBinder khong the rang buec tai model.

Chung ta co the sirs di tham s6 de trash SeP phiti yin de niy. Chting ta sir dung kieu

nullable, nhu sau:

public ViewResult RegisterPerson(int? id) { Neu citing ta sir dung cacti flip (cid:9)

thy, tham se id se null neu lcheng khdp yeti dtt lieu chuyen di di they trong you ciu. Ngoli ra, cluing ta ding co the lim cho tham so fret thinh thy chqn bang each cung cap gii tri (cid:9) djnh neu nhu khong co de lieu sin co, nhu sau:

public ViewResult RegisterPerson(int id = 23) { Ring bu4c nheng Wen tham s6 phirc ttip Khi tham se ciut action method có kieu phirc tap (nheng kieu de lieu mi kh8ng the chuyen doi bing each sir dung lop TypeConverter), lop DefaultModelBinder sir dung the

phAn chieu de thu duqc tap hqp the thuec drill public vi ring buec lin lugt trong se do.

{

Vi du: public class Person

[HiddenInput(DisplayValue = false)]

public int Personld { get; set;

public string Firsthame { get; set; } public string LastName { get; set; [DataType(DataType.Date)]

public DateTime BirthDate { get; set;

public Address HomeAddress ( get; set; } public bool IsApproved { get; set; } public Role Role { get; set; }}

Trang 65/109

Chuang 2 - Cac thAnh phIn chfnh tha ASP.NET MVC

Default model binder se kiem tra cic thuOc tinh xem lieu chi mg ce, la kieu de lieu

don gian. Neu dung, binder se tim muc de lieu (data item) trong you cau c6 cling ten Arai thuOc tinh.

Neu ck thuec tinh la kieu phfrc tap khic, thi qui Binh nay duqc lap Mi cho kieu mai,

met bt) cic thuec tinh public Quay thu thop, ya binder lei co gang tim gii trj cum tit ca. Str khac biet la ten thuOc tinh duqc icing nhau. Vi dp, thuOc tinh HomeAddress dm hip Person la thuOc kieu Address du& day.

public class Address

{

public string Linel { get; set;

public string Line2 { get; set; }

public string City { get; set;

public string PostalCode { get; set;

public string Country { get; set; }

}

2.3.1.3. Got Model Binding theo cach thd cling

Qua With model binding duqc thuc hien ty dOng khi action method xic dinh &Arc dm thaw sit), nhtmg chting ta cling c6 the lciem soit tn,rc tiep qui trinh neu muen. Dieu nay glop cho chfmg ta lciem soar re rang hen ye each kheri to don man model, nut me de lieu duqc

thu Mk), ya lam the nao cic lei duqc xi: ly. Vi dp duai day cho they ckh cluing ta thay din action method Address a HomeController a gqi qui tinh model binding theo cich thu °kg.

(ittpPost)

public ActionResult RegisterMember()

{

Person myPerson new Person();

UpdateModel(myPerson); return View(myPerson);

}

Phucmg thqc UpdateModel nh(lit them se la del arcing ma chimg ta cTh tao pink de ya

co gang thu thap gii trj cho thuOc tinh public dm n6, se dung qui frith rang buOc

Trang 66/109

Chutmg 2 - Cac thanh phAn chfnh ctia ASP.NET MVC

IChi chUng to to gai qua trinh ring budc, cluing to co the giai hon. qua irinh ring budc

tai mOt nguiin du lieu don. Mac djnh, binder tim kiem trong bOn nai: dit lieu form, dir" lieu djnh tuyen, chai query, va nheng tep tin duqc upload.

Vi du duel day cho they each giai hp de binder tim kiem trong mdt tri (Inning

hop nay la de lieu form): [HttpFost]

public ActionResult RegisterMember()

{

Person myPerson =

(Person)DependencyResolver.Current.GetService(typeof(Person));

UpdateModel(myPerson, new FormValueProvider(ControllerContext)); return View(myPerson);

}

Phuang that UpdateModel Ian nay nhan mOt su dive hien caa giao din IValueProvider,

da

mi se tits thinh ngu6n duy nhat coo gia cho qua trinh rang budc. Mtn hang 4 vi

tri dit lieu duac doi dies bdi mdt su thut hien IvalueProvider, nhu sou:

Nguilin Su that thi IValueProvider

Request.Form FormValueProvider

RouteData.Values RouteDataValueProvider

Request.QueryString QueryStringValueProvider

Request.Files HttpFileCollectionValueProvider .. _ . Moi (cid:9) . (cid:9) lap uqc (cid:9)

. e phia tren nhan mi.,* them so xay dung ControllerContext, ma chting to có the thu duqc tir thudc tinh Controller có ding ten, nhu duqc the hien trong danh sich.

Cach phi) bien What cue viec giai hart nguOn de lieu la chi xem xet duy nh,4t cac gil tri form. Co mdt thu that rang budc gin ging co the se dung ma Idging can too the hien cue FormValueProvider, nhu sau:

[HttpPost]

public ActionResult RegisterMember(FormCollection formData)

{

Trang 67/109

Chuang 2 - Cac thanh phIn chfnh c0a ASP.NET MVC

Person myPerson

(Person )DependencyResolver . Current .GetService(typeof (Person) );

UpdateModel(myPerson, formData);

return View(myPerson);

Lap FormCollection thuc hien giao dien IValueProvider, vd neu chting to (cid:9)

djnh tic

action method de nhan tham s6 cua ldeu nay, model binder se cung cap cho chi mg ta met CI&

tutmg c6 the truyen Ulm tiep tOi phuang thirc UpdateModel.

XIII, v61181 ring buOc (binding)

Nguai sic dung se khifing tranh !dick vier tong alp gia 14 ma kh8ng the dugs ring

buec vOi thuOc tinh model twang ung, nhu Ia ngay khong hop le, kieu text cho gia trj se. Kfu

thing ta gqi model binding met each re ring, chitin ta phii co tech nhiem xti 19 yeti bat kk 181 mkt d6. Model binder the hien cac 16i ring buOc bing each nem ra met ngoM le InvalidOperationException. Chi tiet ve cac 16i c6 the tim ra thong qua tinh rang ModelState. 'Chi sir dung phuang thirc UpdateModel, chting ta phiti chuitn bj de bat ngoai le .vi sir dung

ModelState de the hien met thong &to 16i cho ngtrai sir dung. Nhu vi du sau:

(HttpPost]

public ActionResult RegisterMember(FormCollection formData)

{

Person myPerson =

(Person)DependencyResolver.Current.GetService(typeof(Person));

try

( UpdateModel(myPerson, formData); ) catch (InvalidOperationException ex)

{

//...provide UI feedback based on ModelState

}

return View(myPerson);

}

Met phuimg phip kink II sir dung phuang thirc TryUpdateModel. Hwang thirc nay tra ve gia trj true neu qua trinh model binding thinh tong vi tra ve gia trj false neu c6 16i. Nhu vi du sau:

(HttpPost]

Trang 68/109

Chtrcmg 2 - Cac thanh phin chfnh cAa ASP.NET MVC

public ActionResult RegisterMember(FormCollection formData)

{

Person myPerson =

(Person)DependencyResolver.Current.GetService(typeof(Person));

if (TryUpdateModel(myPerson, formData))

{ //...proceed as normal

}

else

{ //...provide UI feedback based on ModelState

}

}

Ljt do duy nhat de uu tien TryUpdateModel han UpdateModel 11 khi chang ta khong thich bit va xir ly veri ngoai 10, ngoai ra kh8ng c6 su khic biet tong qua trinh model binding.

Chit Y: !Chi model binding Quqc 8qi to deng, cac 161 rang butjc se khong ra hieu v6i

ngoai thay vao Q6 chang ta phai kiem tm ket qua thong qua thu6c tinh ModelStatelsValid

2.3.2. Model Validation

Model Validation 11 qua drib dam bio dO lieu m1 chimg ta nkin duqc phi hap di

ring buoc vei model caa thing ta. N6 con cung rip nhOng thong tin hUu ich Qe giap ngubi sir dung khic phuc dirge van di.

PhAn dAu caa qua trinh la Iciern tra chi lieu nhan duqc. Day la met trong nhOng cash

Chung ta bao ve tinh man vgn rim domain model. Bing cash loM be) nhOng adieu kh8ng c6

nghia trong domain model, thing ta nein chin doge nheng tang thai ky lu vi khong mong mutin phat sinh trong ling dung. Plain thir hai quan tang khOng kern, d6 11 giap de( ngubi sir dung khic phuc 18i. Neu chang ta khong cung cap cho ngubi sir dung thong tin vi tong cu di

ha twang the yeti ling dung theo each ma chimg ta an ha lam, ha se fret nen bac bei va nham an. Din din ket qua khong mong main.

Trang 69/109

May min la MVC Framework cung cap than 116 trq rang rai cho model validation.

Chtrang 2 - Cac thanh phAn chinh cua ASP.NET MVC

2.3.2.1. Mc nhdn (Validate) trong action method

Trong action method, thing to co the xac nh(bi model. Ta c6 the hem tra giri tri thuOc tinh cua din tuqng model va ding 14, bit kt 16i flan tim thiy thong qua thuoc tinh ModelState.

Vi du:

if (string.IsNullOrEmpty(mode1.0serName))

{

ModelState.AddModelError("UserName", "Please enter your user name");

if (Imodel.TermsAccepted)

{

ModelState.AddModelError("TermsAccepted", "You must accept the terms");

}

if (MOdelState.IsValid)

{

//send model for further processing

}

Ngoid ra, to co the Iciem tra xem lieu model binder co the grin met gia tri cho thuOc tinh bang phtrung thirc ModelStatelsVaildField. Lam 4y de darn brio ring model binder co kha

!ling phaln tick di) lieu ma ngubi clung di girl. Vey nen c6 the thus hien de Idem tra bi sung.

2.3.2.2. Sir dyng ValidadonSummary

ValidationSummary hien thi thong brio (cid:9) ma chung to di ding IcS, voi ModelState

trong action method. C6 met so qua tai cim phuong that ValidationSummary, nhu sau:

Phweng thirc Mo ni

Html.ValidationSununary0

Html.ValidationSummary(bool)

To ra met tom tit chung cho tit ca cac 16i x.ac nhen. Neu tham s6 bool tra ve true, chi duy nhit 18i model- level duqc hien thi. Ngtrqc lai, tat cit cac ltii deu dupt hien thi.

Hien thi thing brio (chin trong tham so string) Inset met ban tom tit tit ca cac lii.

Html.ValidationSummary(string)

Trang70/109

Chtrang 2 - Clc thanh phIn chtnh ctia ASP.NET MVC

Html.ValidationSurtunary(bool,string) Hien thj thong bao truerc khi c6 loi 'Lac thin.' Neu

tham s6 bool tra ve true, chi duy nhit 1& model-level

duct hien thj.

2.3.2.3. Sir dyng ValidationMessage

Helper Html.ValidtaionMessageFor hien thi cac 16i xac thin cho mai thuac tinh

model don. Vi

@Ntml.ValidationMessageFor(m .> m.UserName)

2.3.2.4. X6c nhOn trong Model Binder

Default model binder thuc hien xac nhen nhu mat qua trinh binding.Model binder thqc

hien mat so xac Whin ca ban cho mai thuac tinh trong dei tuqng model. Neu gia tri khang dugs cung cap hoic lchang duqc phin tich tea ldeu thuac tinh model, thi DefaultModelBinder

cung cap cho cluing ta mat se phutmg thin hem ich ma c6 the chide a them xac Whin cho mat

binder. Chi tiet 6 tong bang dual dity.

Ten phuong thfrc Ma tit Stir thuc thi mic dinh

OnModelUpdated

Ap dung quy tic xac nhan

DlIQ'C gqi khi binder co ging On gia tri cho tat ca thuac

duqc Binh nghitt bad model

tinh trong doi luting model. metadata va ding ky bit ky

(Model-level Validation) lai nio v6i ModelState.

SetProperty Thong bao duct you au

Duqc gqi khi binder muen ap dung mat gia tri tad thuac hoic khan ghtm le se duce

tinh cu the. (Property hien thi.

Validation)

2.3.2.5. C6c ch6 Mich t ► ? lieu (Data Annotations)

MVC Framework ha trq vies sir dung metadata de the hien cac quy tic xac nhin model. Chang ta co the de ding them xac nhin' cho (mg dung dm minh bing cach them khang gian ten Data Annotations vi sir dung cac ac tinh cua no cho cac 16p model. Data Annotations cho phdp chting ta ma ta cac quy tic duqc ap dung cho cac thuac tinh model.

Trang 71/109

Chuang 2 - Cac thanh phIn chfnh min ASP.NET MVC

ASP.NET MVC se lo viec thi hanh chimg va hien dti nhOng thong bao thich hop cho ngutti sir dung. C6 mOt so lugng cat 16p die tinh ke thin lop dac tinh xac than, sir dung de quart ly cac loci xac nhan khac nhau.

MOt so diem quan tong trong cac die tinh data annotation la: • Required: chi ra ring thuOc tinh la throng can thiet. • DisplayName: Dinh nghia doan van ban ma chimg ta muon sir dung trong cac form va

thong bao xac nhan.

• StringLength: Quy djnh de dai tin da cho met throng lcieu chutd (string). • Range: Cling cep gia tri tOi da va ten thieu cho mOt se tzuong. • RegularExpression: Xac nhan bieu thilt du vio nhu mOt bieu thirc chinh quy. • Compare: 2 thuOc tinh phai c6 cimg gia tri.

2.3.2.6. Thy chlnh l6p Validation

Chung ta co the too ra cac ditc tinh xac nhim tay chinh bing each din )(nit fir 16p ValidationAttribute va thuc hien xac nhan logic tha rieng minh. Ta cling co the ghi de len

phuang thirc IsValid cua 16p ca se, phuang this= nay &roc goi b6i binder trong khi gia trj nhu

la met thaw so duqc cung cap heti ngued sit dung.

Vi du:

public class MustBeTrueAttribute : ValidationAttribute

{

public override bool IsValid(object value)

{

return value is bool && (bool)value;

}

}

(Display(Name = "I accept the terms & conditions")]

(MustBeTrue(ErrorMessage = "You must accept the terms")] public bool TermsAccepted { get; set;

Trang72/109

aimg ta ding co the too mOt dic tinh thy chinh 6 mirc de model thay vi cep dO thuOc tinh. Dac tinh model validator chi duoc sir dung dic tinh cep de thuOc tinh khong danglc1 met loi xac nhan. Ching ta phai ap dung dic tinh xac nhan model cho cac lop model tha no.

Chtrcmg 2 - Cac thanh phin chfnh caa ASP.NET MVC

Vi du:

public class AppointmentValidatorAttribute : ValidationAttribute

{

public AppointmentValidatorAttribute() {

ErrorMessage = "]oe cannot book appointments on Mondays";

}

public override bool IsValid(object value) { Appointment app = value as Appointment; if (app == null II stringasNullOrEmpty(app.ClientName) II app.Date == null)

// we don't have a model of the right type to validate, or we don't have // the values for the ClientName and Date properties we require return true;

else {

return 1(app.ClientName == "]oe" Si app.Date.Day0fWeek == DayOfweek.Monday);

}

}

vi du ten' , thaw SO dOi tugng me model binder truyen cho phtrong that IsValid sg nhan

trey thanh del tugng dOi tygng model Appointment. Chang to phai ip dung ac tinh (cid:9) model cho lop model rieng cda no, nhu sau:

[AppointmentValidator] public class Appointment

{

[Required]

public string ClientName { get; set; [DataType(DataType.Date)] [FutureDate(ErrorMessage m "Please enter a date in the future")] public DateTime Date ( get; set;

[MustBeTrue(ErrorMessage = "You must accept the terms")] public bool TermsAccepted ( get; set; }

}

Trang73/109

Chtrcmg 2 - Cac thenh phAn chinh cua ASP.NET MVC

2L32.7.5**Agtclient-s14WvaikAation

Trtnfrc tien,tacin hieu server-side validation la long xictiliart mingtthistrdynggiii

dillieucitahodenserver,serverxacnhandalieuvatralaiketqua.

Trongimgdungweb,ngubisirdungthutmgmongmuOnstrxicnhthingaylaptircmi

khong phai giri dit lieu len server. Day chinh la clietn-side validation vi cluing to thueng thuc

hien bang JavaSmipt.T46cho pher, nproisir dung sire htidailieu tnzercilti giri hhiserverdi

thuchiennhtmgquitrinhkhic.MVCFrameworkhetrolcindioclient-sidevalidation.Cum

trkindio"cengliialicacquyticucnhansirdungcicdactinhduqcthemvioHTMLma

clung to too. Chung dugc plan tich bang thu vien Javascript c6 sin trong MVC Framework.

ComOtsOlgithekhisirdungphucmgphapnay:

• Clningtaldkingphititichhopclient-sidevalidationlogicvaockview; • NeunhuJavascriptbivehieuheatrongtrinhduyet,thiserver-sidevalidadortmingbi

haylxlthwicichtucmgm4

• HanchetitcdOngcnasukhongnhatquiincactrinhduyet. Bjt/tit client validation: Chung ta c6 the bavlit client validation bang cash thiet hip

tong file web.config. Macdirdtthi Maroc*

Ca 2 gia tri pit tren deu phai la true thi client validation mei hoot dOng.

Ngoiti ra, clung ta phai them thu vien Javascript vio layout de ca the sir dung.

Cac tinh ring cua MVC client-validation duvc )(ay dung phis tren cua thu vien 'query

Validation. Neu thick, chimg ta co the sir dung thu vien dm Validation ma be qua cat tinh

ming ctia MVC. Thu vien Validation rat linh hoot vi c6 rat nhieu tinh ming. Tuy nhien, clung

Trang 74/109

Chuang 2 - Cac thanh phan chfnh caa ASP.NET MVC

ta phii c6 met chit quen thuOc yeti Javascript de sir dung Ulu vien Jquery Validation. Sau day

li met vi du don gain:

2.4. URL vi routing

ASP.NET MVC Framework co met be may inh xa URL rat manh nit Be may nay cung cap phucmg phip linh host trong viec inh xu URL sang cho controller. Cht'mg ta c6 the a ding dit ra cic quy lint inh xs, citi dat de ASP.NET MVC diva vio cic quy lint inh xa do, xic djnh xem phii thvc thi controller nio. ASP.NET MVC con co khi ming phan tich URL, chuyen the th8ng se tong URL thinh cic tham se tong phan Eli him ciut controller.

Khi ching ta thvc hien meat yeu cau tir eng chmg ASP.NET MVC, thi yeu cau de se dugc chuyen tiep den met controller nio di tong ing dung. Vi di thvc hien diet' nay chimg ta can den tinh nang gni li Routing tong img dung ASP.NET MVC.

Routing li met Ichai niem quan tong tong MVC framework. CO nhiem vu inh xs etc

Trang75/109

you cku tir trinh duyet gin len server theo m8 hinh MVC.

Clurcrng 2 - Cac thanh phn chfnh caa ASP.NET MVC

Tnrac tien, routing duqc kich hot trong file ciu hinh web (Web.cofig). C6 4 phin trong file clu hinh lien quan den routing, bao gam: system.web.httpModules, system.web.httpHandlers, system. webserver.modules va system.webserver.handlers.

Tiep theo va quan trong han, bang route duqc tao a trong file Global.asax. File

Globale.asax la file d(ic biet di xir ly cac stir hen cho mOt chu trinh img dung ASP.NET MVC. Bang route ducat tuo ra trong su lciOn Application Start nhu sau:

using System;

using System. Collections. Generic; using Systemaing;

using System.Web;

using System.Web.Mvc;

using System.Web.Routing; namespace MyFirstMVC

{

public class MvcApplication : System.Web.HttpApplication

{

public static void RegisterGlobalFilters(GlobalFilterCollection filters)

{

filters.Add(new HandleErn3rAttribute());

} public static void RegisterRoutes(RouteCollection routes)

routes.IgnoreRouter(resource).axd/•pathInfo}");

routes.MapRoute(

"Default", // Route name

"(controller)/{action)/(id)", // URL with parameters

new [ controller = "Home", action = "Index", id =

Ur1Parameter.Optional // Parameter defaults

);

}

protected void Application_Start()

{

AreaRegistration.RegisterAllAreas();

Trang 76/109

Chuang 2 - Cac thanh phan chfnh caa ASP.NET MVC

RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes);

}

}

}

Tap tin Global.asax chits hai phuang thirc chfnh duqc dat ten la Application Start°

va RegisterRoutes0. Trong do, phuang thirc Application Start° chi duqc g9i met lin duy nhat lchi img dpng ASP.NET Ian lien ch3y, vi ding viec curt no dan gian la got phuang thirc RegisterRoutes0.

Phuong thirc RegisterRoutes° duqc sir dpng a du hinh tat ca the route trong ung dpng,

vit no co route mac djnh nhu sau:

routes.MapRoute(

"Default", // Route name

"{controller}/{action}/{id}", // URL with parameters

new { controller = "Home", action = "Index", id =

Ur1Parameter.Optional // Parameter defaults

);

Chung ta cAu hinh route mei bang viec gqi phuong thirc MapRoute0, phucmg thirc nay

chap night cac tham so sau:

- Name: ten cha mute;

URL: mau (pattern) url danh cho route;

- Default: gia tri mac dinh cho cac tham se. route;

- Constraint: tap cac rang buOc nhim giari han the request nhim tIm ra route pia hap nhat; - Namespace: top cac lcheing gian'ten nhim gi6i hitt cac 16.p nham tim ra route phis hop

tillit

Phuong thirc MapRoute° co the duqc ghi de. Ngoli ra, chimg ta co the g9i phuang thirc

MapRoute° ma Irking can sir 118 trq cua cac tham s6 default, contraint, hay namespace. Tham so URL drat cho route mac dish co miu nhu sau {controller}/{action}/{id}.

Vi du route co the Ichep voi nhOng URL sau:

- Product/Detail/23;

Trang 77/109

Chtrcrng 2 - Cic thanh phAn chinh ctia ASP.NET MVC

- Home/Index;

- CategoryNiew/6.

Ta xet met vi du khic la: /Product/Insert/Another/9

Vi mkt URL mac djnh c6 3 phan, trong khi ta you eau url 4 phan, re ring route khong

the khOp yen URL.

ASP.NET MVC framework dung tham se controller de quyet djnh xem controller nao

duqc sir dung de dieu khien you du tit client. Trong khi d6, tham s6 action lira chqn action

nao duqc controller sir dung di frit ltri lai yeu chu cila client.

Neu chimg ta them vio the tham se khong duct at ten controller hoac action, thi

cluing duce sir dung nhtr nhfrng tham se duqc truytn den cac controller action dO.

Mac djnh, tham s6 controller th gia trj la Home, tham se action c6 gia tri la Index, vi

tham se id c6 gia trj r6ng.

Ngoai ra, chimg ta c6 them nhieu route vio trong met bang mute. He dieing se tim !dem

route theo thir to tir tit ming (huh, kiem tra tirng route vit dimg lai khi c6 route diu den phi\ hqp. Vi du:

routes.MapRoute(

"Product", // Route name

"Product/{action}/{id}", // URL with parameters

new { controller = "Product", action = "Index", id = "" } //

Parameter defaults

); routes.MapRoute(

"Default", // Route name

"{controller}/{action)/{id}", // URL with parameters new { controller = "Home", action = "Index", id =

UrlParameter.Optional } // Parameter defaults

);

Trang 78/109

Chuang 2 - Cac thinh phin chfnh coa ASP.NET MVC

2.5. jQuery trong ASP.NET MVC

2.5.1. G16.1 thitu

JQuery chinh la mOt thu vien kieu mei cita Javascript glop don gian hoa cach vitt

Javascript va tang ttic dO rtir ly cac sir lden tren trang web.

DIM day 11 nhfrng ditu 'Query ce thi

- Huang tot cac thanh phAn trong di lieu HTML: Neu khong sir dung thu vien JavaScript nay, cluing ta phai vitt rat rthitu clang code mai co the dat duqc muc fieu la di chuyen

trong citu tnic cay (hay can got la DOM = Document Object Model) ciut meat tai lieu HTML va chqn ra cac thanh pan lien quan nhu trong css;

- Thay dOi giao dien mita met tang web: CSS la deg cu rat math de ctinh dam mOt trang

web nhung no co mOt nhuqc ditm la khong phai tat ca cac trinh duyet deu hien thj giOng

nhau. Chung ta co the sir dung jQuery de giop trang web c6 the hitn thj tot tren hAu het cac trinh duyet. Han nfta, jQuery cling co the thay dti class hoac nhitng clinh clang CSS

da duqc ap dung len HTML;

- Thay dOi nOi dung cita tai lieu.: Jquery khong phai chi co the thay doi bt ngoai efts trang

web, n6 cling c6 tht thay doi nOi dung cita chfnh di lieu de chi v6i vai dung code. NO c6

the them hoac bat nOi dung ten trang, hinh anh co the duqc them van hoac di sang hinh !chic, dash such co the duqc sip zep lei how them chi ca cau ink HTML ctia mot trang web clang co the duqc vitt lei va ma rung;

- Tuong tic vth ngutri ding: !Chi sir dung Jquery kha Hang Wang tic veil ngu&i dung

dtrqc tang len ding ke. Vi du nhu cac &Ong tic click chuOt, thao tic koo tha,...duqc

thuc hien don gian va khong lam cho code HTML cita cluing ta rti tung len;

- Tao hieu img: jQuery cho phip cluing ta sir dung hit nhitu hieu img (long nhu mar &an, chay doc chay ngang v.v.. va neu van chua du, no con cho phap ta pr two ra cac hieu (mg cita rieng minh;

Trang 79/109

- LAy thong tin tir server ma khong can tat Lai tang web. day chinh la cang nghe ngay cang trer nen phi!) bier Asynchronous JavaScript And XML (AJAX), no giitp ngued duet kt web tao ra nhOng trang web twang tat cue tot va nhitu fink thing. Thu vien jQuery

Chtrcmg 2 - Cic thinh phan chinh ctia ASP.NET MVC

loci be stir phirc tap cita hinh duyet trong qui trinh nay va cho phep nguai phut trien web

c6 the tip hung vao cic tinh Wing dau cued.

2.5.2. Co bin ye jQuery

Ham quan tong cita jquery la Jquery0. Chung ta c6 the sir dung no de troy van tit ca cac

thanh phan eau tnic cay (DOM = Document Object Model) thong trang HTML lien kit voi

yeti css.

Vi du:

jQuery("DIV.MyClass") no se tim tit ca the div trong trang c6 sir dung class css

MyClass. jQuery("DIV .MyClass").hide0

la lam cho tit ca cac the div kit hop YIN class

MyClass trong css bien mat.

BE tin lgi ham, jQuery cung cep mOt ctm trtc ngin gon cua jQuery0 de lit $0.

MOt so vi

$("P SPAN'D.addClass("SuperBig") cQng class css SuperBig vao tat ca tat ca cac the dirge chim tong the

.

$(".SuperBig").removeClass("SuperBig") removes class css c6 ten la SuperBig tir cac tag c6 class SuperBig trong file css.

- S(#options").toggle(). Bit tit hien thi phan tir vii id cha tag la option. Neu tag clang

hien thi thi n6 se in tag di va ngtroc 1 i n6 se hie'n tag len.

$("DIV:has(INPUT[type—'checkboxl:clisabled)").prepend("Hey!") chin tag

Hey! vao diu cita tit ca cac the div chile checkbox duqc disable.

-

$("#options A").css("color","red").fadeOuto tun tat ca cac the lien kit co id la

option, they the color cia text thanh mitu do vit thay doi opactiy ve 0.

2.5.3. jQuery tich hyp trong ASP.NET MVC

Mei project ASP.NET MVC dieu duqc tich hop thu vien jquery trong folder /Script. Citing nhu nhieu thu vin javascript khac, no nhu la mfit file .js. DE sir dung chting ta can tham chit% den n6. VI du, trong file layoutcshtml ta chin down code sau.

Trang 80/109

Chuang 2 - Cac thenh phIn chfnh via ASP.NET MVC

2.6. Rao mOt trong ASP.NET MVC

De phut hien met Ong dung web, chting ta can phiti co nhan thin can this& ve van de bito mat web a cap do you cau va plan hal HTTP. C6 nhiau cach khic nhau co the Can &mg vio met Ong dung web, nhu la cross-site scripting (XSS), gia mao yeti cau (CSRF), hay SQL injection. Tuy nhien, neu hieu hitt kk va nhang mei de km nay , chting ta hoin toin c6 the giam thieu nguy cc bi tan Gong. Sau day la met se phuang thin tan cong pha bien.

2.6.1. Cross-Site Scripting

a. Khali niem

Cross-Site Scripting (XSS) la met trong nhOng Id thuat tan ding Icha phi) hien, clang thei n6 cling la met trong nhang yen de bao mat quan tong dei vol cac nhi ph& tilt

web va ca nhOng ngtrai sir dung web. Bit ki mat website nao cho phep nguari sir dung

(Ling thong tin ma khong c6 sir kiem tra chat the cac doan ma nguy hiem thi dau c6 the tiam An cac loi XSS.

Cross-Site Scripting hay can duqc gqi tit la XSS (thay vi gqi tit la CSS giap Minh

nham lan voi CSS-Cascading Style Sheet dm HTML) la mot Id thuat tint cuing bang citch

chen vat) cac website clang nheng the HTML hay nhOng doan ma script nguy hiem co the

gay nguy hal cho nhOng ngtrbi sir dung khic. Trong dd, nhOmg clop ma nguy hiem ducrc

chen vim him hit duqc viet bang cac Client-Site Script nhu JavaScript, JScript, DHTML vi

Ong co tilt la ca cac the HTML.

b. Hotit dOng mia XSS

Va ca ban XSS la cac yeu au request dugs girl tir cac may client ten server nham chen

vio de cac thong tin vugt qui tam kiem sok dm server. No co the la met request &cc girl tir

cac form do lieu hoac ming c6 the chi la cac URL nhu 11:

http://www.exarnple.com/search.cgi?query --