Professional Documents
Culture Documents
Sinh vin thc hin: Nguyn Trng Tr Lp: HT02 Nin kha: 2008 - 2011 Ging vin hng dn: Ths.Nguyn Quang V
Sinh vin thc hin: Nguyn Trng Tr Lp: HT02 Nin kha: 2008 - 2011 Ging vin hng dn: Ths.Nguyn Quang V
LI CM N
Nh vy l ba nm hc ti trng Cao ng Cng Ngh Thng Tin Hu Ngh Vit Hn sp kt thc. n lc ny em vn ngh mnh tht may mn khi c vo hc ti trng Vit Hn. C s vt cht ca trng rt tt, thy c ging vin rt nhit tnh, cc thy c trong ban gim hiu trng chm lo ti sinh vin, tt c iu li cho em nhng n tng rt kh qun. c bit em xin dnh nhiu tnh cm n cc thy c trong nghnh H Thng Thng Tin, thy L Vit Trng, thy H Vn Phi, c Nguyn Phng Tm, c Nguyn Th Hoa Hu, thy Nguyn Vn Li. Trong sut ba nm hc ti trng, cc thy c tn tnh chm lo, dn dt chng em trong hc tp cng nh trong i sng hng ngy. Trc khi vo hc ti trng, em cha bao gi ngh cc thy c li c th quan tm, thn thit vi sinh vin n nh th. Trong thi gian hc tp ti trng, chng em rt nhiu ln lm cho cc thy c bun lng, nhng vi tm lng yu thng sinh vin, thy c b qua cho chng em, tht chng em khng bit phi bo p vi thy c nh th no na. Mt ln na em xin cm n cc thy c, em xin ha khi ra i s c gng sng xng ng vi nhng g m cc thy c dy bo em. Bo co n tt nghip, chnh l k t hi quan trng nht trong i sinh vin, l k thi th hin chng t mi sinh vin hc c nhng g trong sut cc nm hc ti trng. Em sau ba nm n lc, tht vinh d v t ho khi c tham d k bo co n tt nghip ny. Trong sut ba thng, da vo s n lc ca bn thn, c s gip ca cc thy c, em hon thnh bn bo co n tt nghip chuyn ngnh H Thng Thng Tin. Em xin chn thnh cm n thy Nguyn Quang V, thy tn tnh ch bo, hng dn em, gip em hon thnh n ca mnh. Mt ln na, em xin cm n tt c cc thy c, bn b ch bo, gip em v hc tp cng nh i sng. Em s lun nh v nhng iu nh mt k nim kh qun trong i sinh vin ca mnh. Nguyn Trng Tr i
Nguyn Trng Tr Lp HT02
MC LC
LI CM N ......................................................................................................................... i DANH MC CC T TING ANH .................................................................................. iv DANH MC CC BNG .................................................................................................... v DANH MC CC HNH .................................................................................................... vi M U ............................................................................................................................... 1 PHN 1 ................................................................................................................................. 3 GII THIU M HNH MVC ............................................................................................. 3 1.1. 1.2. 1.3. Xut x.................................................................................................................... 3 Kin trc ca m hnh MVC ................................................................................... 3 c im ca m hnh MVC .................................................................................. 5
PHN 2 ................................................................................................................................. 7 M HNH MVC TRONG ASP.NET .................................................................................... 7 2.1. Gii thiu tng quan ............................................................................................... 7 Lch s pht trin ca ASP.NET ...................................................................... 8 Khi qut cc thnh phn ca ASP.NET MVC ............................................. 12 Li ch ca m hnh ASP.NET MVC.............................................................. 13 So snh ASP.NET MVC vi ASP.NET ........................................................... 13
Ci t ................................................................................................................... 15
PHN 3 ............................................................................................................................... 18 XY DNG NG DNG VI ASP.NET MVC FRAMWORK...................................... 18 3.1. 3.2. To mt project vi ASP.NET MVC .................................................................... 18 Tm hiu nh tuyn URL ..................................................................................... 22 H thng nh tuyn trong ASP.NET MVC lm g ?................................. 25
3.2.1.
3.2.2. Cc quy tc nh tuyn cc URL mc nh trong ASP.NET MVC Web Application ................................................................................................................... 25 3.3. 3.4. 3.5. 3.6. Xy dng Controllers ............................................................................................ 34 Xy dng Model ................................................................................................... 42 To giao din ngi dng vi View ..................................................................... 45 Truy nhp d liu vi LINQ ................................................................................. 51
ii
CHNG TRNH NG DNG ........................................................................................ 57 5.1. 5.2. M t chng trnh ng dng ............................................................................... 57 Hnh nh cc chc nng chnh ca trang website ................................................. 60
iii
iv
DANH MC CC BNG
S hiu bng 2.1 2.2 3.1 3.2 3.3 Tn bng Qu trnh pht trin ca Asp.Net So snh gia Asp.Net Webform v Asp.Net MVC Cc Action Method theo URL X l cc URL Cc loi Action Result Trang 8 14 29 36 40
DANH MC CC HNH
S hiu hnh 1.1 1.2 1.1 2.2 2.3 2.4 2.5 2.6 3.1 2.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 4.1 4.2 4.3 4.4 vi Tn hnh Cc thnh phn chnh ca m hnh MVC M hnh tun t ca MVC M hnh MVC M hnh ASP.NET Webform Nn tng Asp.Net MVC Framwork Giao din to project mi Giao din Solution ca MVC Giao din website ng dng m hnh MVC Giao din to project MVC Thng bo hi c cho php to Unit Test Giao din Solution ca MVC Giao din website ng dng m hnh MVC M hnh hot ng ca MVC Giao din thm lp TimkiemController M hnh hot ng ca MVC Giao din trang Master.Page View Quanly Danh sch gio trnh Danh sch gio trnh Qun l ngi dng ng k ti khon mi Trang qun tr ngi dng To user Trang 4 4 7 9 12 16 17 17 18 19 20 21 24 29 44 47 48 51 52 53 54 54 55
Nguyn Trng Tr Lp HT02
Thm quyn mi Gn quyn cho user M hnh c s d liu Trang ch website Trang qun l cc khoa Trang qun l thng tin gio trnh Trang thm gio trnh Trang sa thng tin gio trnh Trang ng k mua gio trnh
55 56 59 60 60 61 61 62 62
vii
M U
L do chn ti: Hin nay vic thit k mt trang web ASP.NET rt d dng, chng ta c th tm ti liu trn mng, tham kho cc project nghin cu v xy dng. Bi v do Microsoft mun to ra mt cng c ngi s dng c th d dng lm vic v xy dng mt trang web nhanh chng nht, ASP.NET WebForm c thit k thc hin nhng iu . ASP.NET Webform c thit k ngi dng cm thy nh mnh ang thit k mt chng trnh Windows Form vy, bng cch ko th cc button, t sinh code HTML, n gin, d hiu Chnh v th nn tng ASP.NET WebForm d ra i cch y hn 10 nm nhng hin nay vn ang s dng rng ri. Tuy nhin u im ca ASP.NET WebForm i khi li chnh l nhc im ca n, chnh l khng c s phn chia r rng gia giao din v code x l, nn ngay trong trang giao din li c cu lnh truy vn Sql. Chnh ci tin li l mt tnh nng no c xy dng th trong c c m HTML, Css, Javascrip, lnh x l s kin n khi chng ta cn thay th hoc nng cp mt chc nng no th rt rc ri. gi l khc phc nhng nhc im ca ASP.NET Webform, nm 2007 Microsoft cho ra i nn tng ASP.NET MVC. ASP.NET MVC l mt la chn thay th cho ASP.NET WebForm, c xy dng vi 3 lp chnh, lp giao din ( Views), lp iu khin (Controllers) v lp d liu (Models). Vic chia mt trang web thnh nhiu lp nh th ny gip cho nhng lp trnh vin c kinh nghim c th xy dng mt website vi cu trc cht ch, r rng. Vi cu trc 3 lp nh th ny, vic nng cp hoc thay th mt chc nng no tr nn ht sc d dng, ng thi vic kim th cng tr nn n gin hn. Vi nhng u im trn, trong tng li chc chn ASP.NET MVC s l mt nn tng chnh trong vic xy dng v pht trin mt website ASP.NET. Tuy nhin v y l mt cng ngh mi, nn ti Vit Nam hu nh cha c p dng nhiu, cng c rt t bn sinh vin bit ti m hnh ny. Chnh v th, em mnh dn chn ti nghin cu v MVC lm n tt nghip ca mnh. 1
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 Mc ch nghin cu Em nghin cu ASP.NET MVC nhm nhng mc ch sau: - Hc c nhng kin thc mi. - Trong qu trnh tm hiu s gip em nng cao kh nng t hc ca mnh. - Phc v cho vic xy dng trang website mua bn sch, nhm mc ch l p dng c nhng g hc c a vo thc t. - To ngun ti liu ASP.NET MVC ting vit cho nhng ai cn tm hiu. i tng v phm vi nghin cu Nghin cu ASP.NET MVC 2.0, nghin cu cc kin thc lin quan. Phng php nghin cu Nghin cu l thuyt thng qua cc ebook c pht hnh bi Microsoft. Tm hiu nhng v d trn mng, tng bc p dng vo cc chng trnh th nghim. Sau tng hp li kin thc v hon thnh bo co v sn phm demo. ngha khoa hc v thc tin ca ti - Hin ti ASP.NET MVC l mt cng ngh cn mi ti Vit Nam, c rt nhiu bn sinh vin cha c bit n cng ngh ny, c bit l cc bn sinh vin ti trng Vit Hn. Chnh v th vic hon thnh bn bo co v chng trnh ng dng s gip ch rt nhiu cho cc bn sinh vin mun tip cn cng ngh mi mt cch nhanh nht, ti v hin ti ti liu ting vit cho ASP.NET MVC l r t him, ng thi c sn mt ng dng demo s gip cc bn d hiu v p dng hn. - ASP.NET MVC c rt nhiu a im vt tri, em ngh tng li ASP.NET MVC s dn thay th ASP.NET Webform trong vic xy dng website. Cho nn vic tm hiu cng ngh ny s c tnh thc tin rt cao, c th p dng ngay by gi hoc trong tng lai.
Hnh 1.1: Cc thnh phn chnh ca m hnh MVC Khi ngi s dng hoc nhng i tng khc cn thay i trng thi ca i tng ha, n s tng tc thng qua Controller ca i tng ha. Controller s thc hin vic thay i trn Model. Khi c bt k s thay i no xy ra Model, n s pht thng ip (broadcast message) thng bo cho View v Controller bit. Nhn c thng ip t Model, View s cp nht li th hin ca mnh, m bo rng n lun l th hin trc quan chnh xc ca Model. Cn Controller, khi nhn c thng ip t Model, s c nhng tng tc cn thit phn hi li ngi s dng hoc cc i tng khc.
Tm hiu m hnh MVC trong lp trnh .NET 2011 V d: Ly v d mt GUI Component (thnh phn ha ngi dng) n gin l Checkbox. Checkbox c thnh phn Model qun l trng thi ca n l check hay uncheck, thnh phn View th hin n vi trng thi tng ng ln mn hnh, v thnh phn Controller x l nhng s kin khi c s tng tc ca ngi s dng hoc cc i tng khc ln Checkbox. Khi ngi s dng nhn chut vo Checkbox, thnh phn Controller ca Checkbox s x l s kin ny, yu cu thnh phn Model thay i d liu trng thi. Sau khi thay i trng thi, thnh phn Model pht thng ip n thnh phn View v Controller. Thnh phn View ca Checkbox nhn c thng ip s cp nht li th hin c a Checkbox, phn nh chnh xc trng thi Checkbox do Model lu gi. Thnh phn Controller nhn c thng ip do Model gi ti s c nhng tng tc phn hi vi ngi s dng nu cn thit. 1.3. c im ca m hnh MVC Ci li ch quan trng nht ca m h nh MVC l n gip cho ng dng d bo tr, module ha cc chc nng, v c xy dng nhanh chng. MVC tch cc tc v ca ng dng thnh cc phn ring l model, view, controller gip cho vic xy dng ng dng nh nhng hn. D dng thm cc tnh nng mi, v cc tnh nng c c th d dng thay i. MVC cho php cc nh pht trin v cc nh thit k c th lm vic ng thi vi nhau. MVC cho php thay i trong 1 phn ca ng dng m khng nh hng n cc phn khc. S d nh vy v kin trc MVC tch bit (decoupling) s ph thuc gia cc thnh phn trong mt i tng ha, lm tng tnh linh ng (flexibility) v tnh ti s dng (reusebility) ca i tng ha . Mt i tng ha by gi c th d dng thay i giao din bng cch thay i thnh phn View ca n trong khi cch thc lu tr (Model) cng nh x l (Controller) khng h thay i. Tng t, ta c th thay i cch thc lu tr (Model) hoc x l (Controller) ca i tng ha m nhng thnh phn cn li vn gi nguyn.
Tm hiu m hnh MVC trong lp trnh .NET 2011 Chnh v vy m kin trc MVC c ng dng xy dng rt nhiu framework v th vin ha khc nhau. Tiu biu l b th vin ha ca ngn ng lp trnh hng i tng SmallTalk (cng do Xerox PARC nghin cu v pht trin vo thp nin 70 ca th k 20). Cc Swing Components ca Java cng c xy dng da trn kin trc MVC. c bit l nn tng ASP.NET MVC Framework s c em trnh by chng sau y.
Tm hiu m hnh MVC trong lp trnh .NET 2011 2.1.1. Lch s pht trin ca ASP.NET
hiu c nhng c im ni bt v mc tiu thit k ca ASP.NET MVC, trc tin cn coi li lch s pht trin ca website ASP. Trong s nhng nn tng pht trin web ca Microsoft, chng ta s thy sc mnh v s phc tp tng ln theo tng nm. Nh trong bng ta thy mi nn tng mi u gii quyt nhng thiu st c trng ca nn tng trc . Tng t, ASP.NET MVC c thit k gii quyt nhng thiu st ca ASP.NET WebForms truyn thng, nhng li bng cch nhn mnh s n gin. Bng 2.1: Qu trnh pht trin ca Asp.Net
Thi k Thi k u Cng ngh Common Gateway Interface (CGI) Sc mnh im yu
n hat
linh Chy ngai web server, nn cn La chn duy nht nhiu ti nguyn vo thi im ny (cn cc tin trnh ring l trn HH cho mi li yu cu) Cp thp
gin,
Chy trong web Ch l ng gi server cho nhng cu truy vn SQL v template cho cc kt qu c nh dng Mc ch chung Thng dch thi gian thc Xu hng spaghetti code
1996
2002/03
ASP.NET 1.0/1.1
Tm hiu m hnh MVC trong lp trnh .NET 2011 Cu trc ln Xu hng lp trnh hng i tng Khng th test
ASP.NET 2.0 ASP.NET Ajax ASP.NET 3.5 ASP.NET MVC 1.0 ASP.NET MVC 2.0 ASP.NET MVC 3.0
ASP.NET truyn thng: ASP.NET l 1 bc nhy vt khi ln u tin xut hin, nhm thu hp
khong cch gia pht trin Window Form hng i tng (c trng thi) v pht trin web hng HTML (khng c trng thi). Hnh di minh ha cng ngh Asp.net WebForm trong ln u xut hin nm 2002.
Hnh 2.2: M hnh ASP.NET Webform Microsoft c gng che du HTTP (khng trng thi) v HTML (vo thi im khng thn thin vi nhiu ngi lp trnh) bng cch dng m hnh giao din nh mt i tng iu khin (control) c cu trc hot ng pha server. 9
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 Mi i tng iu khin (control) lu gi trng thi qua cc yu cu (request) (s dng tnh nng ViewState), t ng to ra m HTML khi cn thit, v t ng kt ni vi cc s kin pha client (v d nh click) vi m hi p pha server. Kt qu WebForm l mt lp tru tng ln nhm chuyn giao din c x l s kin thng qua Web. Nhc im ca ASP.NET ASP.NET truyn thng tng l mt tng hay, nhng thc t li tr nn rc ri. Qua nhiu nm, s dng ASP.NET WebForm cho thy c mt s nhc im: ViewState (trng thi hin th): K thut lu gi trng thi qua cc yu cu
(request) thng mang li kt qu l nhng khi d liu ln c chuyn qua li gia client v server. N c th t hng trm kilobytes trong nhiu d liu thc, v n i qua i li vi mi ln yu cu (request), lm nhng ngi truy cp vo trang web phi ch mt thi gian di khi h click mt button hoc c gng di chuyn n trang k tip. ASP.NET b tnh trng ny rt ti t, Ajax l mt trong cc gii php c a ra gii quyt vn ny. Page life cycle (chu k sng ca mt trang web): K thut kt ni s kin
pha client vi m x l s kin pha server l mt phn ca page life cycle, c th cc k rc ri v mng manh. Ch c mt s t lp trnh vin thnh cng trong vic x l h thng i tng iu khin (control) trong thi gian thc m khng b li ViewState ho c hiu c rng mt s trnh x l s kin khng c kch hat mt cch b him. Limited control over HTML (gii hn kim sot HTML): Server control t to ra n nh l m HTML, nhng khng phi l m HTML m bn mun. Ngoi vic m HTML ca chng thng khng tun theo tiu chun web hoc khng s dng tt CSS m h thng cc server control cn to ra cc gi tr ID phc tp v khng on trc dc, lm kh khn trong vic s dng JavaScript. thc sai v s tch bit cc thnh phn: M hnh code-behind ca ASP.NET cung c p mt gii php cho php ng dng a m ra khi cc dng HTML vo thnh mt lp code behind ring bit. iu ny c ca ngi l lm 10
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 tch bit gia giao din vi m x l, nhng thc t ngi lp trnh c khuyn khch pha trn m x l giao din (x l cy control pha server) vi m x l chng trnh (x l CSDL) trong cng nhng lp code behind khng l. Nu khng c s tch bit r rng gia cc thnh phn, kt qu cui cng thng l mng manh v kh hiu. Untestable (kim chng): Khi nhng ngi thit k ca ASP.NET ln u tin gii thiu nn tng ny, h c th khng lng trc c l vic kim th (test) t ng s tr thnh mt cng on chnh ca vic pht trin phn mm ngy nay. Khng qu ngc nhin, cu trc m h thit k hon ton khng thch hp vi vic kim th (test) t ng. ASP.NET tip tc b sung thm cc tnh nng. Phin bn 2.0 thm nhiu thnh phn (component) chun c th gim kh nhiu lnh m bn cn phi t vit. AJAX release nm 2007 l phn hi ca Microsoft vi phong tro Web 2.0/Ajax hi , h tr tng tc pha client trong khi lm cho cng vic ca ngi lp trnh n gin hn. Phin bn 3.5 l mt bn nng cp nh hn, thm h tr cho cc tnh nng ca .NET 3.5 v cc i tng iu khin (control) mi. Tnh nng ASP.NET Dynamic Data to ra cc trang cho php c hnh sa / lit k c s d liu mt cch t ng . S ra i ca ASP.NET MVC: Vo thng 11 nm 2007, hi tho ALT.NET ti Austine, Texas, gim c iu hnh Scott Guthrie ca Microsoft cng b v m t v nn tng pht trin web MVC mi, xy dng trn ASP.NET, r rng c thit k nh l mt li hi p thng vo cc li ch trch trc y. ASP.NET MVC cung cp s tch bit r rng gia cc thnh phn bt chp vic s dng li m hnh MVC mc d n khng c g mi MVC ln u c cng b vo nm 1978 trong d n Smalltalk ca Xerox PARC - nhng ngy nay n ph bin nh l mt kin trc cho cc ng dng web bi v cc l do sau : Ngi dng tng tc vi ng dng MVC t nhin s theo mt chu trnh :
ngi dng thc hin mt hnh ng, v hi p li, ng dng thay i m hnh d liu ca n v chuyn mt trang c cp nht cho ngi dng, v sau 11
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 vng xoay lp li. iu ny l thch hp cho mt ng dng web phi lun chuyn hng lat cc li yu cu cng nh hi p. Nhng ng dng web lun cn phi kt hp mt s cng ngh (v c s d liu, HTML v m x l), lun chia thnh nhiu lp, v nhng mu ra ny sinh thnh cc khi nim trong MVC. ASP.NET MVC thc thi mt bin th hin i trn MVC m c bit thch hp vi cc ng dng web. 2.1.2. Khi qut cc thnh phn ca ASP.NET MVC
Nh gii thiu chng trn, ASP.NET MVC cng chia nh mt ng dng thnh ba thnh phn ci t, mi thnh phn ng mt vai tr khc nhau v nh hng ln nhau, l models, views, v controllers.
Hnh 2.3: Nn tng Asp.Net MVC Framwork Models trong cc ng dng da trn MVC l nhng thnh phn c nhim v lu tr thng tin, trng thi ca cc i tng, thng thng n l mt lp c nh x t mt bng trong CSDL. Ly v d, chng ta c lp Gio trnh c s dng m t d liu t bng Gio trnh trong SQL, bao gm M gio trnh, Tn gio trnh... Views chnh l cc thnh phn chu trch nhim hin th cc thng tin ln cho ngi dng thng qua giao din. Thng thng, cc thng tin cn hin th c ly t thnh phn Models. V d, i tng Gio trnh c mt "Edit" view bao gm cc textbox, cc dropdown v checkbox chnh sa cc thuc tnh ca thng tin gio trnh; c mt "Display" view gm 2 dng, ct dng l M gio trnh, dng sau l Tn gio trnh... xem thng tin v sinh vin. 12
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 Controllers trong cc ng dng kiu MVC chu trch nhim x l cc tc ng v mt giao din, cc thao tc i vi models, v cui cng l chn mt view thch hp hin th ra mn hnh. Trong kin trc MVC, View ch c tc dng hin th giao din m thi, cn iu kin dng nhp xut ca ngi dng vn do Controllers m trch. 2.1.3. Li ch ca m hnh ASP.NET MVC
C tnh m rng do c th thay th tng thnh phn 1 cch d dng Khng s dng Viewstate, iu ny lm cc nh pht trin d dng iu H thng nh tuyn mi mnh m. H tr tt hn cho test-driven development (TDD m hnh pht trin kim
th) ci t cc kim th n v (unit tests) t ng, xc nh v kim tra li cc yu cu trc khi bt tay vo vit code. H tr kt hp rt tt gia ngi lp trnh v ngi thit k giao din. S dng cc tnh nng tt nht c ca ASP.NET. So snh ASP.NET MVC vi ASP.NET
2.1.4.
Bn c nghe qua v im yu v gii hn ca ASP.NET WebForm truyn thng, v lm th no m ASP.NET MVC vt qua nhng vn ny. iu khng c ngha l ASP.NET WebForm cht m ch l : Microsoft mun mi ngi hiu rng c hai nn tng song song nhau, h tr cho nhau, v c hai u l i tng cho vic pht trin hin ti. Ni chung, vic bn chn la gia hai m hnh cn ty vo hon cnh. ASP.NET WebForm mang ti mt trang web m giao din c th lu gi trng thi, v cui cng thm vo mt lp tru tng tinh vi nm trn HTTP v HTML, s dng ViewState v postback to ra hiu ng ca vic c trng thi . iu ny thch hp vi phong cch pht trin ko v th ca Window Form, tc l bn t cc i tng c giao din ln trang v m x l vo trnh x l s kin ca chng.
13
Tm hiu m hnh MVC trong lp trnh .NET 2011 MVC ha vo bn cht khng trng thi ca HTTP, lm vic chung vi n hn l chng li. iu ny yu cu bn phi hiu tht s cch lm vic ca mt ng dng web, t c iu , MVC cung cp mt cch tip cn n gin, mnh m v hin i cho vic vit cc ng dng web vi m c trt t m d dng kim th (test) v bo tr sau ny, gii phng nhng phc tp kh chu v cc gii hn khng ng c. iu c bit l ASP.NET MVC c m ngun m, khng ging cc nn tng trc , bn c th d dng ti m ngun gc ca ASP.NET MVC, thm ch bn c th sa i v to ra phin bn ca ring bn. C nhng tnh hung m ASP.NET WebForm kh tt thm ch cn tt hn ASP.NET MVC. V d nh cc ng dng nh, ni b m trc tip kt ni thng vo cc bng CSDL hoc dn ngi s dng thng qua cc trnh hng dn t ng (wizard). V th s khng cn phi lo lng v bng thng do ViewState, khng dnh dng ti vn ti u ha h thng tm kim, v khng b lm phin v vic kim th (test) v bo tr lu di. S tin li ca cch pht trin kiu ko th ca ASP.NET WebForm lm m i cc im yu ca n. Nhng mt khc, nu bn vit 1 ng dng trn Internet, hoc cc ng dng ni b ln hn, bn s hng ti tc download nhanh v tng thch trnh duyt cho, c xy dng vi cht lng cao hn, m kin trc tt thch hp cho vic test t ng, trong trng hp ASP.NET MVC s mang li nhng u im quan trng. Bng 2.2: So snh gia ASP.NET Webform v ASP.NET MVC Tnh nng Kin trc chng trnh Kin ASP.NET trc m ASP.NET MVC hnh Kin trc s dng vic phn chia chng trnh thnh Controllers, Models, View C php chng trnh S dng c php Cc s kin c kiu
WebForm->Business>Database
Tm hiu m hnh MVC trong lp trnh .NET 2011 kin v control do server control khng do server qun l Truy cp d liu qun l
S dng hu ht cc cng Phn ln dng LINQ to ngh truy cp d liu SQL class to m hnh trong ng dng truy cp i tng Debug chng trnh phi Debug c th s dng cc thc hin tt c bao gm unit test kim tra cc cc lp truy cp d liu, phng thc trong s hin th, iu khin cc controllers controls
Debug
Tc phn ti
Tc phn ti chm Phn ti nhanh hn do trong khi trang c qu khng phi qun l nhiu cc controls v ViewState qun l cc control trong trang
Tng tc vi javascrip Tng tc vi javascrip d kh khn v cc controls dng v cc i tng c iu khin bi server khng do server qun l iu khin khng kh Cu trc a ch URL c Cu trc a ch rnh dng <filename>.aspx?&<cc tham s> mch theo dng Controllers/Action/ID
URL Address
2.2. Ci t Trc ht to mt ng dng ASP.NET MVC bn cn phi p ng cc iu kin sau: Do chng ta cn phi ci b Visual Studio 2008 tr ln nn my tnh cn Sau chng ta cn phi ci t b Visual Studio 2008 hoc 2010 (trong
phi c cu hnh tt thiu: cn trng 5Gb cng, RAM 1,5G, chip phi mnh. n ny em s dng Visual Studio 2010). 15
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 Sau khi chng ci t xong b Visual Studio, khi to mt d n MVC, ta chn File -> New Project (hoc s dng phm tt Ctrl + Shift + N). Ta c th ty chn ngn ng Visual Basic hoc c# (trong n ny em chn C#), ta chn tip ng dng Web, chn tip ASP.NET MVC 2 Web application.
16
Tm hiu m hnh MVC trong lp trnh .NET 2011 Ta nhn button Ok, chng trnh s to cho chng ta mt ng dng Web MVC mu nh sau:
Hnh 2.5: Giao din Solution ca MVC Bn nhn F5 chy chng trnh.
Hnh 2.6: Giao din website ng dng m hnh MVC Nh vy l chng ta to cho mnh mt trang Web nh ng dng m hnh MVC, trong cc phn sau chng ta s tm hiu r hn cch thc hot ng ca m hnh MVC trong ASP.NET. 17
Nguyn Trng Tr Lp HT02
Hnh 3.1: Giao din to project MVC Khi to ASP.NET MVC Web application th mt hp thoi Unit Test xut hin. Chn Yes nu mun to mt Project Test, ngc li th chn No.
18
Hnh 3.2: Thng bo hi c cho php to Unit Test Sau khi mt ASP.NET MVC Web application c to, nhn vo Solution Explore s thy 3 th mc xut hin: Model, View, Controllers cha cc i tng tng ng vi cc thnh phn Models, View, Controllers trong m hnh MVC. Visual Studio s to mt solution mi bao gm hai projects con. Project u tin l web project ni m ta s ci t ng dng. Project th hai l testing project m ta dng test project th nht:
19
Hnh 3.3: Giao din Solution ca MVC Chy ng dng bng cch nhn F5. Nu l ng dng chy ln u th s c thng bo hi c cho m ch Debug hay khng ? Nu ng chn Modify the Web.config file to enable debugging, khng mun Debug chn Run without debugging.
20
Tm hiu m hnh MVC trong lp trnh .NET 2011 Kt qu khi chy ng dng:
Hnh 3.4: Giao din website ng dng m hnh MVC Cu trc th mc trong Project: Cu trc th mc mc nh ca ng dng ASP.MVC gm c 3 th mc chnh: Controllers Models Views ASP.NET MVC khuyn khch vic a nhng lp (class) iu khin vo bn trong th mc /Controllers, nhng lp (class) thuc v m hnh d liu vo bn trong th mc /Models, v nhng g lin quan n giao din vo th mc /Views. Mc d ASP.NET MVC Framework khng bt buc chng ta phi s dng cu trc ny, nhng y l cu trc mc nh khi chng ta to mt d n (project) mi v ASP.NET MVC lun lun khuyn khch vic s dng n phn chia ng dng. Ngoi tr trng hp ta ra mt l do thuyt phc thay i n.
21
Tm hiu m hnh MVC trong lp trnh .NET 2011 3.2. Tm hiu nh tuyn URL ASP.NET MVC Framework c mt b my nh x URL tht s mnh m. B my ny cung cp phng php rt linh hot trong vic nh x URLs sang cho Controller. Bn c th d dng nh ra cc quy lut nh x, ci t ASP.NET MVC da vo cc quy lut nh x , xc nh xem phi thc thi Controller no. ASP.NET MVC cn c kh nng phn tch URL, chuyn cc thng s trong URL thnh cc tham s trong phn gi hm ca Controller . ng i mc nh t ASP.NET MVC URL n Controller Classes Browser (trnh duyt) yu cu mt a ch t Controller Acction trong ASP.NET MVC Framework c gi l nh tuyn URL (URL routing). URL routing s ch nh yu cu (request) ti Controller Action. URL routing s dng mt bng nh tuyn iu khin cc yu cu (request). Bng nh tuyn c to khi ng dng c chy ln u tin. Bng nh tuyn c thit lp trong file Global.asax. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace Totnghiep { public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute( "{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name 22
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); } } } Khi ng dng chy ln u tin, phng thc Application_Start() c gi. Phng thc ny gi mt phng thc khc RegisterRouter(RouteTable.Router) to bng nh tuyn. nh tuyn mc nh chia mt yu cu (request) thnh 3 on, mi phn on nm gia 2 du /. Phn on u tin cha mt Controller, phn on th 2 cha Controller Action, phn on th 3 l tham s u vo ca Controller Action. V d: vi a ch /Quanly/Editgiaotrinh/1 c hiu l
Controller = Quanly Action = Editgiaotrinh Id = 1
23
Tm hiu m hnh MVC trong lp trnh .NET 2011 nh x cc URL vo trong class Controller Hu ht cc Web Framework, nh ASP , PHP , JSP , ASP.NET WebForms , u nh x cc URL vo mt file c lu trn a. Ly v d URL /Giaotrinh.aspx hay /Giaotrinh.php c chuyn n file Giaotrinh.aspx hay Giaotrinh.php trn a cng x l. Khi mt ng dng web nhn c HTTP Request n Web Server, th Web Framework s chy mt on code c th tng ng vi ni dung ca file, v on code ny ng vai tr x l yu cu do pha client gi n. Thng thng th on code ny s sinh ra HTML v p ng li pha client. MVC Framework li hot ng theo mt cch hon ton khc, thay v nh x cc URL vo cc file lu trn a, n s a thng vo cc lp (class). Nhng lp (class) c nh x ti c gi l Controllers, v chng s x l yu cu (request) c yu cu n, kim sot dng nhp xut v giao din i vi ngi dng, thc thi cc ng dng v data logic tng ng vi yu cu (request). Cui cng, chng s dng cc thnh phn Views to HTML v p tr li yu cu (request).
24
Tm hiu m hnh MVC trong lp trnh .NET 2011 3.2.1. H thng nh tuyn trong ASP.NET MVC lm g ?
ASP.NET MVC Framwork c mt h thng nh tuyn URL (URL Routing System) linh hot cho php xc nh cc quy tc nh x a ch URL bn trong ng dng. Mt h thng nh tuyn c 2 mc ch: Xy dng mt tp hp cc URL i vo ng dng v nh tuyn chng ti cc Controller v thc thi cc phng thc Action x l. Xy dng cc URL gi i m c th gi ngc tr li Controller/Action. S dng cc quy tc nh x URL iu khin URL i vo v i ra tng tnh mm do cho vic lp trnh ng dng, ngha l nu mun thay i cu trc URL (v d /Giao_trinh bng /Lop) c th thay i mt tp hp quy tc nh x mc ng dng m khng cn phi vit li m lp trnh bn trong Controllers v View. 3.2.2. Cc quy tc nh tuyn cc URL mc nh trong ASP.NET MVC
Web Application Mc nh khi to ng dng vi ASP.NET MVC Web Application trong Visual Studio s to ra mt ASP.NET MVC Application Class gi l Global.asax cha cu hnh cc quy tc nh tuyn URL. Xy dng cc nh tuyn thng qua phng thc RegisterRoutes(ReouteCollection router) v khi ng dng bt u, ng dng Application_Start() trong Global.asax s gi RegisterRouter to bng nh tuyn.
25
Nguyn tc nh x u tin trong hnh trn ch ra cho ASP.NET MVC Framework mt quy lut nh x URL theo dng /[controller]/[action]/[id] tng ng vi tn controller c nh x n / tn action method c triu gi / v tham s truyn vo action method . Vi ASP.NET MVC Web Application th mc nh controllers l HomeController, mc nh ControllerAction l Index v Id l rng Khi ng dng ASP.NET MVC Web Application nhn c mt URL, MVC FrameWork s nh gi cc quy tc nh tuyn trong tp hp RouteTable.Routes quyt nh Controller no s iu khin request. MVC Framwork s chn controller bng cch nh gi cc quy tc trong bng nh tuyn theo trt t sn c. Route Instances Quy tc nh x c ng k bng cch khai bo thm mt Route instances vo System.Web.Mvc.RouteTables Route colletion.
Nguyn Trng Tr Lp HT02
26
Tm hiu m hnh MVC trong lp trnh .NET 2011 Class Route ny c mt s thuc tnh m bn c th s dng cu hnh (configure) quy tc nh x ca bn. Bn c th set nhng thuc tnh theo cch truyn thng ca .NetFramework 2.0
Nh hnh trn ta c th thy cc thuc tnh trong lp Route c th nh sau: Thuc tnh Url trong lp Route dng khai bo mt Pattern URL mt quy tc nh x URL khi mt URL c yu cu n web ca chng ta, MVC Framework s t ng nh x URL n Pattern ny v phn tch cc thnh phn trong URL bit u l Controller , u l Action Method v u l tham s u vo cho Action Method . Bn khng b gii hn bi mt tham s duy nht m chng ta c th c mt bt k s lng tham s no m bn mun c trong URL. V d bn c th s dng quy tc nh x
/Blogs/[Username]/Archive/[Year]/[Month]/[Day]/[Title] m ha mt URL yu cu n v MVC Framework s t ng phn tch v truyn nhng tham s nh l Username, Year, Month, Day v Title n Action Method trong Controller ca chng ta. Thuc tnh Default trong class Route dng khai bo mt tp gi tr mc nh c s dng x l cc URL c yu cu n khng c cc gi tr tham s nh nh thuc tnh Url. V d quy tc nh x URL bn trn chng ta khai bo 27
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 2 tham s mc nh trong Url l Action v Id. iu ny c ngha l nu mt URL: / Quanly / c yu cu n th h thng nh x s mc nh s dng Index nh l mt tn Action Method trong QuanlyController, c th l Action Method Index() trong QuanlyController s c thc thi x l khi ngi dng yu cu Url / Quanly/. Tng t, nu nh Url /Quanly/Danhsachgt c yu cu th mt gi tr tham s null s c s dng cho Action Method Danhsachgt(). Thuc tnh RouteHandler trong class Route khai bo mt IRouteHandler c th c s dng x l yu cu sau khi URL c m ha v xc nh c quy tc nh x thch hp. Trong v d trn chng ta ch cho MVC Framework rng chng ta mun s dng class System.Web.Mvc.MvcRounteHandler x l cc URL m chng ta cu hnh. L do cho vic ny l chng ta mun chc rng h thng nh x URL c s dng cho c hai trng hp c ngi dng yu cu l MVC v non-MVC (WebForms). Ngoi ra cn mt thuc tnh na trong class Route m chng ta s tm hiu sau torng bi vit ny. N cho php chng ta xc nh trc nhng iu kin cn thit p dng cho mt quy tc nh x c th. V d chng ta c th ch mun quy tc nh x ch p dng cho HTTP c th, hoc chng ta c th dng Regular Expression nh nhng tham s lc nhng quy tc nh x ph hp Route Rules Evaluation Khi mt URL c yu cu n ASP.NET MVC Application, MVC Framework tm trong bng h thng nh x (RouteTable.Routes collection) xc nh mt quy tc nh x thch hp x l. MVC Framework xc nh Controller bng cch tm trong nhng quy tc nh x m chng ta to theo t t t trn xung di. URL c yu cu n s c so snh vi tng quy tc nh x trong RouteTable.Routes collection, nu mt quy tc nh x no ph hp vi URL th n s c p dng ( tt c nhng quy tc cn li s c b qua). iu ny c ngha l bn phi sp xp cc quy tc nh x mt cch tht hp l.
28
Tm hiu m hnh MVC trong lp trnh .NET 2011 Routing Scenario: Custom Search URL Hy s dng cc quy tc nh x lm mt kch bn thc t bng cch chng ta s thc hi n chc nng tm kim cho trang web ng k mua gio trnh ca chng ta. u tin ta s thm mt lp TimkiemController cho ng dng:
Hnh 3.6: Giao din thm lp TimkiemController Ta s nh ngha hai Action Method trong class TimkiemController. Action Method Index() s c s dng trnh by mt trang tm kim, trong trang tm kim s c c mt TextBox cho php ngi dng nhp vo v gi mt t kha tm kim. Cc Action Method Result() s c s dng x l khi ngi dng Submit v thc hin vic tm kim c s d liu, v sau hin th kt qu li cho ngi dng:
29
S dng quy tc nh x mc nh /[controller]/[action]/[id] , Chng ta s s dng nhng URL sau y gi x l cho chc nng tm kim sn phm thng qua SearchController: Bng 3.1: Cc Action Method theo URL URL /Timkiem/?tenGT=XML&tien=20001 Action Method Index
Lu rng khi ta s dng URL / Timkiem/ l chng ta s dng quy tc nh tuyn mc nh do Visual Studio to sn theo mc nh khi chng ta to ng dng ny v nh hi ny ta cp v thuc tnh Default trong class Route, MVC Framework s s dng thuc tnh Default ny gi Action Method Index() trong TimkiemController x l URL ny.
i vi URL /Timkiem/?tenGT=XML&tien=20001. Nu bn mun URL ca chng ta c r rnh hn, minh bch hn th chng ta truyn tham s thng qua mt QueryString, v coi nh l mt tham s trong phn thng s ca URL.
Nguyn Trng Tr Lp HT02
30
Tm hiu m hnh MVC trong lp trnh .NET 2011 Chng ta c th lm cho nhng URL tm kim c p hn bng cch thm quy tc nh x URL trc quy tc mc nh /[controller]/[action]/[id] m Visual Studio to cho chng ta khi to ng dng ny nh di y:
Vi quy tc trn ta xc nh r rng cc thng s Controller v nhng tham s cho Action Method cho URL /Timkiem/. Chng ta ang ch ra rng URL /Timkiem lun lun phi c x l bi Action Method Index() trong TimkiemController. Validation Pre-Conditions for Routing Rules Kim tra cc iu kin cn thit cho mt quy tc nh x Nh ta cp trc trong n ny, lp Route c mt thuc tnh Validation cho php chng ta thm cc iu kin xc nhn trc khi quy tc c MVC Framework nh gi l ph hp (ngoi cc b lc URL) cho mt URL c yu cu n. ASP.NET MVC Framework cho php ta s dng Regular Expression kim tra mi i s trong URL, cng nh cho php ta nh gi cc tiu HTTP. Di y l mt quy tc validation m ta mun ng dng i vi URL nh /Quanly/Editgiaotrinh/1 N quy nh rng cc i s ID phi l mt s (khng chp nhn mt string), v rng n phi c t 1 n 8 k k t:
31
Tm hiu m hnh MVC trong lp trnh .NET 2011 /Quanly/Editgiaotrinh/tri hoc /Quanly/Editgiaotrinh/1212121212 th n s khng ph hp. Constructing Outgoing URLs from the Routing System Xy dng cc Outgoing URL t h thng cc quy tc nh x H thng nh x URL trong ASP.NET MVC Framework chu trch nhim v hai iu: nh x cc URL c yu cu n cc Action Method trong cc class Gip xy dng ra cc URL c th c s dng gi v Action Method H thng nh x URL c mt s phng t hc b tr (Helper Method) v cc lp cho n d dng t ng tm kim v xy dng cc URL trong thi gian chy (runtime). Html.ActionLink Helper Method Html.ActionLink. N c th c s dng trong cc thnh phn View v cho php bn t ng to ra siu lin kt <a href="> da trn cc quy tc nh x URL ca chng ta c khai bo trong h thng nh x trong tp tin Global.asax. V d: Controller x l. trong lp Controller.
N t ng chn nhng quy tc nh x ph hp trong ht thng nh x m ta nh ngha trc trong v d ny v s t ng t o ra gi tr href cho cc siu lin kt.
32
Tm hiu m hnh MVC trong lp trnh .NET 2011 Url.Action Ngoi vic s dng Html.ActionLink, ASP.NET MVC cn c mt Helper Method Url.Action() . Helper Method ny to ra chui URL th m bn c th s dng nu bn mun. N s s dng h thng nh x URL gen ra mt chui nh di y (khng c trong th a <a href="> </a>). Controller.RedirectToAction ASP.NET MVC cng h tr mt Helper Method
Controller.RedirectToAction() m ta c th s dng trong iu khin thc hin vic chuyn hng (Redirect) (trong cc URL c xc nh bng cch s dng h thng nh x URL). V d khi m di y c gi trong mt Controller :
th n s tng ng vi Response.Redirect(/ Quanly/danhsachgt) (iu ny qu quen thuc vi chng ta khi lp trnh vi ASP.NET Web Form). im hay nhng Helper Medthod trn l n cho php chng ta trnh cc hard-code trong URL bn trong Controller v . Nu sau ny bn mun thay i quy tc nh x URL t /Search/[query]/[page] sang /Search/Results/[query]/[page] hoc /Search/Results?query= [query]&page=[page]. Chng ta ch cn thay i m ngun mt ni duy nht m khng cn phi thay i thm bt c m ngun no trong cc thnh phn Controller v View ca chng ta. Constructing Outgoing URLs from the Routing System (using Lambda Expressions) - Xy dng cc URL gi i t h thng nh x (s dng biu thc Lambda) Ngoi vic truyn thng s mt cch linh hot bng cch s dng anonymous type, ASP.NET MVC Framework cng h tr kh nng to ra cc nh x bng cch s dng strongly-typed mt c ch cho cho php compile-time checking v intellisense cho URL Helper. l cc biu thc Lambda. 33
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 V d, ActionLink anonymous type:
C th c vit li nh sau:
Ch : Khi s dng Lambda Expression chng ta khng bao gi thc s thc thi cc Action Method trong SearchController. V d, m di y khng gi Action Method Result:
Khi ngi dng nhp vo lin kt ny n s gi li mt yu cu http n my ch v s gi Action Method Result ca SearchController. 3.3. Xy dng Controllers Mi ln c mt yu cu c gi n trang web ASP.MET MVC ca bn th n s c gii quyt bi controller. Controllers c trch nhim iu khin cc tng tc ca ngi dng bn trong ng dng MVC. Controllers quyt nh ci g s c chuyn v cho ngi dng khi to mt yu cu (request) trn trnh duyt (browser). Controller c trch nhim cho cc ng dng logic, bao gm tip nhn thng tin ngi dng nhp vo , ra lnh, ly d liu t Model v cui cng l x l. C mt s tng ng gia cc Controller ASP.NET MVC v cc trang ASPX trong ASP.NET Webform. V d, c hai u l cc im tng tc vi ngi dng cui. Tuy nhin trong mt s cch khc, n c cc khi nim kh khc nhau, v d:
34
Tm hiu m hnh MVC trong lp trnh .NET 2011 Ta khng th tch ri trang ASPX vi code x l logic ca n, v c hai n
u hp tc thc hin cc ng dng nht nh. Tuy nhin ASP.NET MVC th li khc , chng tch bit thnh phn giao din vi phn code x l, chnh v th ta c th gi cho code ca mnh c n gin, d hiu, duy tr s c lp cn thit. Trang ASP.NET WebForm ASP c mt lin kt mt - mt vi mt giao din ngi dng c th. Tuy nhin trong ASP.NET MVC, mt b iu khin khng gn lin vi mt giao din ngi dng c th, v vy n c th gii quyt cc yu cu bng cch gi li cc d liu cn thit. Tt nhin l nhng ng dng thc t s gip chng ta hiu r v Controller hn, xem n c th gip chng ta xy dng nhng ng dng mt cch n gin nh th no. Cc lp Controller c bn MVC Framwork i km mt lp c s tiu chun iu khin, System.Web.Mvc.Controller. Bao gm cc thnh phn sau y: Action methods: hnh ng ca chng ta c chia thnh nhiu phng thc, mi phng thc tng ng vi mt a ch URL khc nhau, v c gi vi cc tham s c ly t yu cu. Action results: ta c th ty chn tr v mt i tng m t nhng d nh kt qu ca mt hnh ng (v d c th tr v mt View, n mt Action method khc) v n s thc hin cho chng ta. Vic tch bch gia xc nh kt qu vi vic thc thi s n gin ha vic kim th mt cch ng k. Filters: ta c th rt gn cc hnh vi s dng li c (v d nh chng thc) nh b lc, v sau kha mi hnh vi vo mt hoc nhiu controller hay action moethod bng cch t mt [thuc tnh] trong m ngun ca chng ta. Mt controllers l mt lp (Class) (C# class hoc VB class). Trong v d ng dng ASP.NET MVC Web Application mu lun tn ti 2 controllers l AccountController.cs v HomeController.cs nm trong folder Controllers .
35
Tm hiu m hnh MVC trong lp trnh .NET 2011 HomeController.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Hitest.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } public ActionResult About() { return View(); } } } Trong HomeController.cs c 2 phng thc l Index() v About(). C 2 phng thc ny l 2 action trong controller HomeController.cs, n thc hin khi c gi bng a ch /Home/Index v Home/About. Bt c phng thc no c thuc tnh public u l mt action trong controller. Tm hiu v cc Action Method trong Controler. Sau khi ta to mt lp QuanlyController, ta c th bt u thm cc businness logic x l vic khi ngi dng truy cp vo URL / Quanly/ Danhsachgt ca ng dng. 36
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 Trong v d ny chng ta s thc hin 3 kch bn cho ng dng Web ca chng ta : Duyt tt c cc danh sch gio trnh Chnh sa thng tin gio trnh Thm gio trnh mi
Chng ta s s dng cc URL sau y x l tng tnh hung: Bng 3.2: X l cc URL nh dng URL /Quanly/Danhsachgt Hnh vi Duyt tt c cc danh sch gio trnh /Quanly/Editgiaotrinh/Magt Chnh sa thng tin gio trnh /Quanly/Creategt Thm mi gio trnh /Quanly/Creategt /Quanly/Editgiaotrinh/1 V d URL /Quanly/Danhsachgt
C mt vi cch chng ta vit lnh (code) trong lp QuanlyController x l ba loi URL c gi n. Mt cch l ta c th np chng (Override) li phng thc Execute trn lp Base Controller v vit cc cu lnh if / else / switch logic bng tay xem cc URL c yu cu n v sau thc hin cc logic thch hp x l n. Mt cch d dng hn nhiu, l s dng tnh nng c tch hp ca MVC Framework cho php chng ta nh ngha Action Method trn Controller, v sau lp Base Controller t ng gi Action Method thch hp thc hin da trn quy tc nh x URL s dng cho ng dng.
37
Tm hiu m hnh MVC trong lp trnh .NET 2011 V d, chng ta s thm 3 Action Method vo class QuanlyController x l cc URL c yu cu n nh sau:
Cc quy tc ca vic nh x URL c cu hnh mc nh khi mt d n mi c to. V vy, nu chng ta nhn c mt yu cu URL /Quanly/Danhsachgt, cc quy tc nh x s x l Danhsachgt l tn ca mt ActionMethod trong QuanlyController, v phng thc Danhsachgt () ny s c gi x l yu cu. Tng t nu chng ta nhn c mt yu cu URL /Quanly/Editgiaotrinh/1, quy tc nh tuyn s x l Editgiaotrinh nh tn ca mt ActionMethod, v phng thc Editgiaotrinh (int id) s c gi x l yu cu, vv nh x URL c tham s n Action Methods trong Controller C nhiu cch ly c tham s trong URL t nhng Action Method ca cc lp Controller . Cc lp Controller ca chng ta c implement (thc thi cc phng thc t mt lp) t mt Base Controller n a ra mt tp hp cc i tng Request (yu cu) v Reponse (p ng) c th c s dng. Nhng i tng ny c chnh xc cng mt cu trc API (Application Programming Interface - giao din lp trnh ng dng) nh l HttpRequest / HttpResponse i tng m bn quen 38
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 thuc vi trong ASP.NET Web Form . iu khc bit quan trng l cc i tng ny implement (thc thi cc phng thc t mt lp) t cc giao din (interface) thay v cc lp c nim phong khng c tha k (sealed classes). Li ch ca vic c cc giao din (interface) ny l ta d dng mc ni vi chng cho php d dng s dng Unit Testvi cc lp Controller. Di y l mt v d v cch chng ta c th s dng Request API ly mt gi tr chui truy vn ID t bn trong Action Method Editgiaotrinh() ca chng ta trong lp QuanlyController:
ASP.NET MVC Framework cng h tr t ng nh x cc gi tr tham s t URL n Action Method nh nh mt tham s ca Action Method . Theo mc nh nu bn c mt tham s trong Action Method ca bn, MVC Framework s xem xt cc d liu yu cu gi n xem c mt yu cu HTTP tng ng c gi tr cng tn no khng. Nu c, n s t ng chuyn n vo nh mt tham s cho Action Method ca bn. Ngoi ra ASP.NET MVC Framework cng cho php bn s dng URL Routing truyn tham s (v d: thay v Quanly/Editgiaotrinh?id=34 bn c th s dng Quanly/Editgiaotrinh/34). Quy lut nh x tn l Default c khai bo mc nh trong file Global.asax t khi chng ta to Project ny c nh dng /[controller]/[action]/[id]. iu ny c ngha l nu c bt k ng dn URL c yu cu n th hu t sau cng ca n (sau tn ca Controller v tn Action Method) th theo mc nh s c coi nh mt tham s c tn id v c th c t ng truyn vo Action Method ca chng ta nh l mt tham s u vo. T Action Method Detail() cng s nhn c tham s ID t ng dn URL (v d: /Quanly/Editgiaotrinh/1): 39
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 Di y l mt lp QuanlyController ca em by gi c cc Action Method c th x l tng URL c yu cu vi cc tham s cn thit: public ActionResult Danhsachgt() { } [HttpGet] public ActionResult Creategt() { return View(); } [HttpPost] public ActionResult Creategt([Bind(Exclude = "Ma_giao_trinh")]Giao_trinh gt) { } [HttpGet] public ActionResult Editgiaotrinh(int id) { } [HttpPost] public ActionResult Editgiaotrinh(Giao_trinh gt) { } Tham s ty chn trong MVC Framework c s dng theo kiu d liu nullable trong Action Method ca chng ta. V tham s ch mc trn Action Method Editgiaotrinh() l mt bin int (c c php khai bo l int?), nn MVC Framework s b qua gi tr ny nu n khng c mt trong URL v s truyn vo Action Method ca ta nu n c mt trong URL. Cc loi Action Result Bng 3.3: Cc loi Action Result Cc kiu tr v ViewResult Mc ch Hin th mt View mi hoc trang mc nh. Tr v mt View mi hoc V d v s dng Return View(); Return View("MyView", modelObject); Return PartialView();
Nguyn Trng Tr Lp HT02
PartialViewResul 40
Tm hiu m hnh MVC trong lp trnh .NET 2011 t mc nh cc b. Return PartialView("MyPartial", modelObject); RedirectToRoute Result Tr v mt Action method mi ReturnRedirectToAction("SomeO therAction", "SomeController"); ReturnRedirectToRoute("MyNam edRoute"); RedirectResult ContentResult FileResult Chuyn ti mt a ch khc Tr v d liu th vn bn n trnh duyt Truyn d liu nh phn (chng hn nh tp tin t a) trc tip n trnh duyt. Chuyn i mt i tng sang kiu Json v tr v nh mt phn hi. Gi mt on m ngun JavaS cript cn phi c thc hin bi trnh duyt. y ch dng s dng trong cc kch bn Ajax ReturnRedirect("http://www.exam ple.com"); ReturnContent(rssString, "application/rss+xml"); Return File(@"c:\report.pdf", "application/pdf");
JsonResult
ReturnJson(someObject);
JavaScriptResult
ReturnJavaScript("$('#myelem').hi de();");
HttpUnauthorized Thit lp trng thi phn Result ng HTTP m 401 (c ngha l "khng c u quyn"), m nguyn nhn c ch xc thc hot ng (Hnh thc xc thc hoc Windows Authe ntication) l yu cu ngi truy cp phi ng nhp. EmptyResult Khng tr v ci g.
41
Tm hiu m hnh MVC trong lp trnh .NET 2011 3.4. Xy dng Model Hin ti chng ta c mt lp QuanlyController v ba Action Method sn sng x l yu cu trang web gi n. Bc tip theo s l xy dng mt s lp gip chng ta lm vic vi c s d liu, ly cc d liu thch hp cn thit x l cc yu cu web. Trong mt ng dng ASP.NET MVC, Model l cc thnh phn c trch nhim duy tr trng thi ca cc i tng, thng thng n l mt lp nh x n mt bng trong c s d liu (v d: chng ta c mt lp Giao_trinh c s dng m t bng Giao_trinh bn trong c s d liu SQL ca chng ta). ASP.NET MVC Framework cho php bn s dng bt k m hnh truy cp d liu no bn mun thao tc, qun l d liu ca bn. Bn c th s dng ADO.NET DataSets / DataReaders, hoc nu bn thch s dng mt m hnh nh x i tng quan h (ORM) nh NHibernate, LLBLGen, WilsonORMapper, LINQ to SQL / LINQ To Entities. i vi ng dng mua sch ny chng ta s s dng LINQ to SQL class. Ta s bt u bng cch phi chut trn th mc, Model trong d n web MVC ca chng ta trong VS v chn Add New Item thm mt m hnh LINQ to SQL . Ta to mt lp Giao_trinh.cs.Trong lp ny ta s khai bo cc thuc tnh ca bng Giao_trinh, mc ch l s to ra mt lp trung gian gia c s d liu v Controller:
42
Nh vy l chng ta c tt c d liu m ta cn cho lp QuanlyController. Tip theo chng ta hy tin hnh ci t lp QuanlyController. Ci t lp QuanlyController Controller trong mt ng dng MVC c trch nhim x l cc yu cu gi n, x l v tng tc ca ngi dng, v thc hin logic thch hp (truy xut v cp nht d liu c lu tr trong mt c s d liu, vv) Controller trong mt ng dng MVC khng tr v mt HTML c th nh ASP.NET Web Form m nhim v to ra HTML c thc hin bi cc thnh phn View trong ng dng mt cch ring bit. View ch lo vic trnh by d liu, v khng cha bt k buiness logic hoc code truy cp c s d liu no (m thay vo chng c x l bi cc Controller ). Trong mt quy trnh lm vic web MVC , cc Action Method trong Controller s x l cc yu cu web c yu cu n, s dng cc gi tr tham s n thc thi cc buiness logic, truy xut hoc cp nht cc i tng m hnh d liu t c s d liu, v sau chn mt View render v mt giao din ngi dng thch 43
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 hp v Reponse v cho trnh duyt. Controller s truyn mt i tng d liu Strongly Typed n View cho n c th render mt giao din ph hp:
Hnh 3.6: M hnh hot ng ca MVC Ta c th t hi li ch ca vic tch Controller v View nh th ny l nhng g ? Ti sao khng t chng trong cng mt class ? ng lc chnh trong phn vng cc ng dng nh th ny l gip cho vic Unit Testing c d dng, lm cho m ngun ng dng ca chng ta trong sng hn, r rng hn t s lm cho ng dng ca chng ta d bo tr hn theo thi gian. Khi ci t ba Action Method ca class QuanlyController ca chng ta, em s s dng cc gi tr tham s URL n ly cc m hnh i tng thch hp t c s d liu, v sau chn mt thnh phn View v li mt Reponse HTML thch hp. Chng ta s s dng phng thc RenderView () trong lp Base Controller xc nh xem chng ta mun s dng cng nh truyn vo mt d liu c th m chng ta mun xem. Di y l kt qu cui cng lp QuanlyController ca chng ta: public ActionResult Danhsachgt() { var gt = csdl.Giao_trinhs; return View(gt.ToList()); } [HttpGet] public ActionResult Creategt() { return View(); 44
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 } [HttpPost] public ActionResult Creategt([Bind(Exclude = "Ma_giao_trinh")]Giao_trinh gt) { if (ModelState.IsValid) { csdl.Giao_trinhs.InsertOnSubmit(gt); csdl.SubmitChanges(); return RedirectToAction("danhsachgt"); } return View(gt); } [HttpGet] public ActionResult Editgiaotrinh(int id) { var editgt = csdl.Giao_trinhs.Select(p => p).Where(p => p.Ma_giao_trinh == id).FirstOrDefault(); return View(editgt); } [HttpPost] public ActionResult Editgiaotrinh(Giao_trinh gt) { var gtrinh = csdl.Giao_trinhs.Select(p => p).Where(p => p.Ma_giao_trinh == gt.Ma_giao_trinh).FirstOrDefault(); gtrinh.Ma_giao_trinh = gt.Ma_giao_trinh; gtrinh.Ten_giao_trinh = gt.Ten_giao_trinh; gtrinh.Gia_tien = gt.Gia_tien; csdl.SubmitChanges(); return RedirectToAction("Danhsachgt"); }
3.5.
To giao din ngi dng vi View Chng ta hon tt vic trin khai thc hin v th nghim cc ng dng ca
ng dng mua bn gio trnh. By gi chng ta cn phi thc hin cc giao din ngi dng HTML cho n.
45
Tm hiu m hnh MVC trong lp trnh .NET 2011 Chng ta s lm iu ny bng cch ci t View to ra mt giao din ngi dng thch hp khi gi RenderView () :
Trong on m v d trn tham s Danhsachgt ca RenderView() ch l tn ca mt View m chng ta mun render, v tham s th hai l mt i tng danh sch cc danh mc sn phm c th m chng ta mun truyn vo i tng View s dng nh l d liu to ra HTML thch hp cho vic tao giao din ngi dng . Cc ASP.NET MVC Framework h tr kh nng s dng bt k cng c khun mu gip ta to ra cc giao din ngi dng (bao gm c cc cng c template hin c ging nh NVelocity, Brail cng nh nhng template mi m bn t vit). Theo mc nh cc ASP.NET MVC Framework hin ti s dng trang ASP.NET (.aspx), Master Page (.master), v UserControl (.ascx) c h tr trong ASP.NET. Chng ta s s dng cng c xy dng giao din ngi dng ca ASP.NET thc hin cho ng dng mua gio trnh ca chng ta. nh ngha mt File Site.Master Cng dng ca trang Master Page chng ta bit n ASP.NET Web Form trc y, n ny s khng cp n. Mc nh th khi ta to Project MVC th c sn mt Site.Master trong folder Share.
46
Hnh 3.7: Giao din trang Master.Page Tm hiu cu trc th mc View Theo mc nh khi ta to ra mt d n ASP.NET MVC mi bng cch s dng Visual Studio, n s to ra mt th mc Shared bn trong th mc gc View . y l ni c ngh lu tr Master Pages, UserControl , v Views m ta mun dng nhiu ni trong ng dng. Khi xy dng thnh phn View c th i vi mt Controller, mc nh ASP.NET MVC s lu tr chng trong th mc con trong th mc gc View. Theo mc nh, tn ca mt th mc con phi tng ng vi tn iu khin. V d , bi v 47
Nguyn Trng Tr Lp HT02
Tm hiu m hnh MVC trong lp trnh .NET 2011 Controller chng ta xy dng c gi l QuanlyController, mc nh cc View ca QuanlyController s c lu tr trong th mc con tn l Quanly:
Hnh 3.9: View Quanly Khi chng ta gi (invoke) cu lnh RenderView(string viewName ) trong mt Controller , MVC Framework s t ng tm mt View template tng ng .Aspx hoc .Ascx trong ng dn /View/ControllerName, nu khng th tm thy View no thch hp th ASP.NET MVC Framework s tm trong t h mc /View/Shared.
48
Tm hiu m hnh MVC trong lp trnh .NET 2011 To mt Danhsachgt View Chng ta c th to ra View Danhsachgt cho QuanlyController trong Visual Studio bng cch click phi chut chn Add New Item trn th mc Quanly v chn MVC View Page. Chng ta s c mt trang aspx mi v c th ty chn lin kt vi trang ch Site.Master. Khi xy dng ng dng bng cch s dng mt m hnh MVC , ta mun gi cho m ngun View n gin, v chc chn rng m ngun View ch n thun lm vic biu din UI cho ngi dng. Cc x l v Buiness logic ch nn t trong cc lp Controller. Controller s x l, chn View thch hp v truyn nhng d liu cn thit vo View biu din ra UI cho ngi dng (c thc hin khi gi RederView() ). V d, di y trong Action Method Danhsachgt ca class QuanlyController, ta truyn vo Danhsachgt View mt i tng var gt = csdl.Giao_trinhs Categories View thc hin vic hin th d liu da vo i tng gt
MVC
View Page
mc
nh c
tha t cc
lp c
System.Web.Mvc.ViewPage, cung cp mt s phng thc Helper v cc Properties m chng ta c th s dng trong vic xy dng giao din ngi dng. V y l kt qu:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Totnghiep.Models.Giao_trinh>>" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Danh sch gio trnh </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <center>
49
<% } %>
50
Hnh 3.10: Danh sch gio trnh 3.6. Truy nhp d liu vi LINQ LINQ (Language Integrate Query) l s sng to mi trong .Net Framework 3.5, l mt tp m rng ngn ng cho php thc hin cc truy vn trong ngn ng C# 2008 v VisualBasic 2008. LINQ cho php Select (chn), Filter (lc), Sort (phn loi), Group (nhm) v tranfom data (chuyn d liu) t cc ngun data source (d liu ngun) khc nhau theo mt cch chung. LINQ to Objects thc hin truy vn cc i tng. LINQ to DataSet thc hin truy vn DataSet. LINQ to SQL thc hin truy vn n c s d liu SqlServer m khng phi vit code. LINQ to XML c d liu t XML. V d, nu em khng dng LINQ, th mun ly tt c cc gio trnh th em vit m lnh nh sau:
51
Tm hiu m hnh MVC trong lp trnh .NET 2011 Tuy nhin nu s dng LINQ th m lnh nh sau:
52
53
Tm hiu m hnh MVC trong lp trnh .NET 2011 View th hin vic ng k mt ngi dng mi nh sau:
Hnh 4.2: ng k ti khon mi Qun l ngi dng vi cng c Website Administration Tool Chn menu Project -> ASP.NET Configuration. Xut hin cng c Website Administration Tool, chn Tab Security
54
Tm hiu m hnh MVC trong lp trnh .NET 2011 Click v Create User to ngi dng, y em v d to ngi dng tn Tri:
Hnh 4.4: To user Phn quyn nhm ngi dng (Rules) to role trc ht phi enable role bng cch click vo link Enable roles sau click vo Create and Manage roles -> to role c tn Quantri.
55
Tm hiu m hnh MVC trong lp trnh .NET 2011 By gi ta gn quyn cho user Tri mi to
Nh vy khi mun thc hin chc nng Delete gio trnh, bt buc ngi dng phi ng nhp vi quyn Quantri.
56
57
Tm hiu m hnh MVC trong lp trnh .NET 2011 Quy trnh hot ng ca website V pha trung tm: Qun l vic cp nht gio trnh, khoa. Qun l vic ng k mua ca sinh vin. V pha sinh vin: Tin hnh chn la gio trnh da trn cc khoa tng ng. Tin hnh in cc thng tin c n thit v cp nhp thng tin. Quy trnh nghip v Quy trnh ng k mua sch
Bt u
Kt thc
Kt thc
58
59
Tm hiu m hnh MVC trong lp trnh .NET 2011 5.2. Hnh nh cc chc nng chnh ca trang website Trang ch: y l trang ch ca website, s xut hin trc tin khi ngi
Hnh 5.2: Trang ch website Trang qun l khoa: y l trang dng hin thng tin danh sch cc khoa
Tm hiu m hnh MVC trong lp trnh .NET 2011 Trang qun l gio trnh: Trang dng hin th danh sch cc gio trnh,
ng thi trung tm c th xa gio trnh trc tip ti y. Ti trang ny, trung tm c th chuyn ti cc trang nh chnh sa gio trnh, thm gio trnh.
61
Hnh 5.6: Trang sa thng tin gio trnh Trang ng k mua gio trnh: Ti trang ny, sinh vin c th lc gio trnh
theo khoa, chn gio trnh, in thng tin sinh vin v cui cng l hon thnh vic ng k mua gio trnh.
62
63
64