Mc lc Phn I. 1. Lch s pht trin Web 2. L do ra i ca ASP.NET MVC 2.1 Gii thiu ASP.NET truyn thng 2.2 Nhc im ASP.NET truyn thng 2.3 Gii thiu ASP.NET MVC (model-view-controller) 2.3.1 Ngun gc ASP.NET MVC 2.3.2 Cc thnh phn cu thnh ASP.NET MVC 2.3.3 Cu trc mc nh ca mt d n ASP.NET MVC 2.4 So snh gia ASP.NET v ASP.NET MVC 2.5 MVC2 3. Tm hiu cc thnh phn bn trong ASP.NET MVC 3.1 Controllers v Actions 3.1.1 Controllers l g ? 3.1.2 Controller Actions l g ? 3.2 Views 3.2.1 Views l g ? 3.2.2 To Views nh th no ? 3.2.2 S dng Views nh th no ? 3.3 Models 3.3.1 Models l g ? 3.3.2 To Database
Trang 2 3.3.3 To Data Model vi Microsoft Entity Framework 3.3.4 S dng Linq to Sql trong ASP.NET MVC 1.5 URLs v Routing 1.6 View Master Page v User Control Page 1.a.1 View Master Page 1.a.2 User Control Page 3.7 HTML Helpers 1.a.1 HTML Helpers l g ? 1.a.2 Cc phng thc c sn trong HTML Helpers 1.a.3 B sung cc phng thc ng trong HTML Helpers 3.8 Validation Form Data 1.a.1 Model State l g ? 1.a.2 Validation Helpers 1.a.3 Validating with the IDataErrorInfo Interface 1.a.4 Style Validation Message 3.9 Model Binders v Action Filters 1.a.1 Model Binders 1.a.2 Action Filters 1.10 Chng thc Users 1.11 S dng Unit Test trong ASP.NET MVC 5. Trin khai ng dng ASP.NET MVC 6. Tch hp Ajax vo ASP.NET MVC 7. S dng jQuery trong ASP.NET MVC 8. Kt hp gia MVC v WebForms Phn II: Xy dng module website thc nghim: NHANLUCQUOCTE.EDU.VN
Trang 3 1. Con ng pht trin Web Thi gian Cng ngh Sc mnh Yu im Jurassis CGI n gin (la chn duy nht vo thi im ny) Chy bn ngoi web server Bronze age IDC (Microsoft Internet database connector) Chy bn trong server Ch l ng gi nhng cu truy vn SQL v template cho cc kt qu c nh dng. 1996 ASP (Active Server Page) Mc ch chung Thng dch thi gian thc 2002/ 2003 ASP.NET 1.0/1.1 - Giao din c trng thi - c bin dch - khuyn khch lp trnh hng i tng. - Cu trc file ln - Chim nhiu bandwidth. - HTML kh nhn - Khng kh nng test. 2005 ASP.NET 2.0 2007 ASP.NET Ajax 2008 ASP.NET 3.5 * CGI l mt chun c ngha l kt ni mt web server vi mt chng trnh c kh nng thc thi c lp, v n tr v kt qu ng. 2. L do ra i ca ASP.NET MVC 2.1 Gii thiu ASP.NET truyn thng: - Da trn nn .NET h tr a ngn ng nh C#, VB.NET, - Microsoft hng n vic giu i giao thc HTTP (n i bn cht bn trong) v code HTML bng vic a ra m hnh UI (user interface) nh l cc i tng control pha server (mi control c trng thi ca ring mnh, t ng sinh m HTML khi cn, v t ng kt ni vi cc s kin pha client). - Cc nh pht trin Web khng cn phi lm vic vi cc request v response trong tng HTTP c lp. Thay th n chnh l thut ng StateFull UI (tm dch l trng thi giao din ngi dng). Cc nh pht trin Web ch cn ko-th, v tng tng ra iu g s xy ra trn server khi thit k giao din Web.
Trang 4 2.2 Nhc im ASP.NET truyn thng: khi ng dng Webforms (dng cng ngh ASP.NET) c s dng trong thc t sinh ra nhng nhc im sau: -ViewState: l c ch chnh duy tr trng thi qua mi ln request, iu ny dn n mt khi lng d liu ln c truyn i gia client-server. - Chu k sng ca 1 trang web: l c ch kt ni gia trnh iu khin s kin client v server, iu ny c th tr nn phc tp, v d ph v. - Cc control b gii hn trn m HTML: vi control server sinh m HTML, nhng khng phi l m HTML m ta mong mun. V d vi control servers sinh ra gi tr ID phc tp, v kh truy xut bi JavaScript. - Cm nhn sai trong vic phn tch code ra khi m HTML bng cch to code- behind bn di trang: Trong thc t th cc nh pht trin Web khuyn khch nn trn vic trnh by code (v d: vic qun l control pha server) vi tnh logic trong ng dng ca h (v d: thao tc c s d liu) vi nhau. Tt hn ht l khng nn tch ring chng ra v kt qu thng l kh hiu v d v. - Khng th kim th: Khi ln u tin cc nh thit k ASP.NET a ra nn thit k ca h, h khng th lng trc vic kim th s tr thnh xu hng pht trin phn mm hin nay. V kin trc h xy dng th hon ton khng ph hp cho vic kim th t ng. * V phin bn ASP.NET 2.0 thm vo mt s components chun nhm gim sinh ra s lng code bn khng mong mun (bn cn vit chng). V nm 2007, Microsoft cho ra i Web 2.0/Ajax, h tr nhiu hn trong vic tng tc vi client. V phin bn mi nht ca ASP.NET l phin bn 3.5 vi mt s tnh nng mi c thm vo nh tch hp mt s controls mi, ASP.NET dynamic data gip vic to ra database t ng n gin hn nh (lit k, sa, cc mu tin trong database). Xa hn na trong Visual Studio 2010 ASP.NET 4.0 s cho cc nh pht trin web ty chn cc thnh phn ID ca HTML, nhm gim rc ri v cc gi tr ID phc tp v kh d on trc. 2.3 Gii thiu ASP.NET MVC : ASP.NET MVC l nn tng cng ngh mi nht ca Microsoft hin nay l ASP.NET MVC, n c thit k t suy ngh l lm th no xy dng mt phn mm tt (phn mm tt l phn mm bn mun to ra v n d dng c thay i - Stephen Walther). ASP.NET MVC c thit k lm sao c th b sung cc nguyn l v cc patterns pht trin phn mm khi xy dng cc ng dng web. Bn cnh , n c thit k h tr trong vic kim th. 2.3.1 Ngun gc ASP.NET MVC: * ASP.NET MVC 1.0 - Cng ngh ASP.NET MVC l mi, tuy nhin n c lch s lu i. Nn tng MVC c pht minh bi Trygve Renskaug, ng vit trang giy u tin ni v MVC vo nm 1978. Ban u n c gi l
Trang 5 Thing Model View Editor pattern, nhng sau n c t tn li l Model View Controller pattern. - ASP.NET MVC ln u tin xut hin l trong d n m ngun m MonoRail - V ngun gc tht s cho ra i cng ngh Microsoft ASP.NET MVC l do Scott Guthrie (mt trong nhng nh sng to ra ASP.NET) trn chuyn bay n Austin, Texas ni v hi tho Alt.NET vo thng 10-2007. - Cui cng th u nm 2009 phin bn ASP.NET MVC 1.0 (released) c ra i. - iu kin cn xy dng ng dng ASP.NET MVC: + Microsoft.Net Framework 3.5 SP 1 + Microsoft ASP.NET MVC + Visual Studio 2008 SP 1 2.3.2 Cc thnh phn cu thnh ASP.NET MVC: ng dng MVC (l t vit tt ca Model View Controler) c chia ra lm 3 phn: - Model: Model ca MVC cha tt c cc logic ca ng dng (v d: x l c s d liu,), khng cha trong view hay controller. Model cha gm cc logic ng dng, cc logic nghip v, v logic truy xut c s d liu. Model ca MVC cha m hnh cc lp ( m hnh i tng trong min ng dng ). - View: View ca MVC cha cc th HTML v view logic - Controller: Controller ca MVC cha tnh logic trong lu iu khin
( control-flow ).
Hnh 2.1: M hnh MVC (k hiu: tng tc vi) * Li ch ca ng dng web da trn m hnh MVC: - C tnh m rng do c th thay th tng thnh phn mt cch d dng - Khng s dng viewstate, iu ny lm cc nh pht trin d dng iu khin ng dng ca mnh. - H thng nh tuyn mi mnh m - H tr tt hn cho test-driven development (TDD) ci t cc 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. * Nhc im ca ASP.NET MVC - Khng hng n s kin lm cho cc nh pht trin ASP.NET webform kh khn. - Yu cu hiu bit v HTTP, HTML, CSS v JavaScript. - Th vin ca nh phn phi th ba khng mnh bng. 2.3.3 Cu trc mc nh ca mt d n ASP.NET MVC: cc bc to 1 project mc nh bng ASP.NET MVC nh sau: - Khi ng visual studio 2008, chn File -> New -> Project -> ASP.NET MVC Web Application
Trang 7 Trang 6
Hnh 2.2: To mi d n ASP.NET MVC
Hnh 2.3: To b test d n - Sau khi d n khi to xong, ta c cu trc mc nh c to sn bi trnh Visual nh sau:
Hnh 2.4: Cu trc mc nh 1 project ASP.NET MVC * ngha tng th mc ng dng ca ASP.NET MVC - App_Data: cha cc file d liu, th mc App_Data c th cha mt c s d liu cc b. - Content: cha ni dung tnh nh hnh nh v cc file css. - Controllers: cha cc lp controller ca ASP.NET MVC - Models: cha cc lp model ca ASP.NET MVC - Scripts: cha cc file javascript bao gm th vin ASP.NET Ajax v jQuery. - Views: cha cc views ca ASP.NET MVC - Sau khi chy th chng trnh (ctrl+F5) s cho kt qu nh sau :
Trang 9 Trang 8
Hnh 2.5: ng dng mc nh do visual to ra
Hnh 2.5: Khung nn ASP.NET .Net Framework: h tr cc loi ng dng nh desktop, web v cc ng dng console. ASP.NET framework l mt phn ca .NET framework, c xy dng nhm h tr cc ng dng Web (caching, authentication v authorization). Trong , Microsoft c 2 hng pht trin web trn nn ASP.NET l ASP.NET Webforms v ASP.NET MVC. V ASP.NET MVC ch l s thay i v mt t duy, n khng hon ton thay th cho c ng dng ASP.NET Web Forms, v vic chn hng no xy dng mt website l ty thuc vo cc nh pht trin. 2.4 So snh gia ASP.NET webform v ASP.NET MVC
Trang 10 * S khc bit ca ASP.NET MVC vi ASP.NET 2.0 Tnh nng ASP.NET 2.0 ASP.NET MVC Kin trc chng trnh Kin trc m hnh WebForm Business Database. Kin trc s dng vic phn chia chng trnh thnh Controllers, Models, Views C php chng trnh S dng c php ca webform, tt cc s kin v controls do server qun l. Cc s kin c iu khin bi controllers, cc controls khng do server qun l. Truy cp d liu S dng hu ht cc cng ngh truy cp d liu trong ng dng. Phn ln dng LINQ to SQL class to m hnh truy cp i tng. Debug Debug chng trnh phi thc hin tt c bao gm cc lp truy cp d liu, s hin th, iu khin cc controls/ Debug c th s dng cc unit test kim tra cc phng thc trong controller. Tc phn ti. Tc phn ti chm khi trong trang c qu nhiu cc controls v ViewState qu ln. Phn ti nhanh hn do khng phi qun l ViewState qun l cc control trong trang. Tng tc vi javascript. Kh khn D dng URL Address Cu trc a ch URL c dng <filename>.aspx?&<cc tham s> Cu trc a ch rnh mch theo dng Controllers/Action/Id 2.5 ASP.NET MVC 2
Trang 11
- ASP.NET MVC 2 ch c th chy trn nn asp.net 3.5 sp1 v asp.net 4. Chng ta ch c th trin khai asp.net mvc 2 trn visual studio 2010 hoc visual studio 2008 sp1. c h tr bi cc h iu hnh nh: Windows 7; Windows Server 2003; Windows Server 2008; Windows Vista - Cc c tnh mi trong asp.net MVC 2: + New Strongly Typed HTML Helpers: H tr din t lambda (lambda
V d: expression) tham chiu n mt mng hay tp hp no .
Trang 12
Ngoi ra, ASP.NET MVC2 cn h tr thm mt s strongly-typed HTML nh bn di:
+ Overriding the HTTP Method Verb: HTTP verbs cho php ta quyt nh + Enhanced Model Validation support both server and client thng qua b liu action (GET, POST, PUT, DELETE) no s c thc thi .
Trang 13 th vin javascript c tch hp sn trong ASP.NET MVC 2 + Auto-Scaffold UI Helpers with template customization: You can ensure more maintainability as you modify your applications using strongly-typed helpers such as Html.TexBoxFor. The new templated helpers let you easily associate HTML elements for edit and display with data types improving productivity. + Asynchronous Controllers support + Support for rendering sub-sections of a page/site using Html.RederAction
+ Improved Visual Studio tooling support + Areas Support: cho php chng ta d dng phn vng, v gom nhm cc chc nng thng qua ng dng MVC. + Lots of new helper functions, utilities, and API enhancements
Trang 14
+ DataAnnotation Validation Support: k t phin bn ASP.NET MVC 2, microsoft xy dng sn cc DataAnnotation Validation nhm qun l cc li (rules) trong cc lp model v viewmodel bn trong ng dng vi 4 lut ( validation rules) c xy dng sn nh: [Required], [StringLength], [Range], v [RegularExpression]. + Bc 1: Khai bo lp Person ko theo cc validation rules
Trang 15
+ Bc 2: To action Create()
+ Bc 3: To trang View
Trang 16
Tuy nhin, validation rules trn mi ch thc hin pha server, khi , bt c validation rules th i hi ngi dng phi nhn nt submit. Nhng ASP.NET MVC 2 xy dng kin trc validation rules rt tuyt vi bao gm c vic h tr validation rules c pha server ln client. Tt c nhng g chng ta cn lm l thm hai
Chy th v thu kt qu + Bc 4: Chy v kim tra kt qu tham chiu javascrip l
Trang 17
Ngoi ra, ASP.NET MVC cn cho php ta t to cc thuc tnh Validation, v d, chng ta mun xy dng validation rule cho thuc tnh Email, n gin, ta ch cn k tha t lp RegularExpressionAttribute V cch s dng th ging nh v d lm trc Ni tm li, ASP.NET MVC 2 b sung rt nhiu c tnh mi, nu c nhu cu tm hiu thm, chng ta c th tham kho ti website: http://www.asp.net/learn/whitepapers/what-is-new-in-aspnet-mvc. 2.6 ASP.NET MVC 3 - ASP.Net MVC 3 ch c th chy trn nn asp.net 4, chng ta ch c th trin khai asp.net mvc 3 trn visual studio 2010. tm hiu thm v k hoch ra i ASP.NET MVC 3 cng cc c tnh mi m n c th h tr, chng ta c th tham kho ti website: http://aspnet.codeplex.com/wikipage?title=Road %20Map&referringTitle=MVC. 3. Tm hiu cc thnh phn bn trong ASP.NET MVC 3.1 Controllers v Actions 3.1.1 Controllers l g ? - Controllers m nhn vic x l logic pha ng dng bao gm vic nhn gi tr u vo ca ng dng, pht sinh cc lnh thc thi, nhn d liu t min model, v a ngi dng i n nhng UIs khc nhau.
Trang 18
Hnh 3.1: HomeController c to ra bi Visual * T hnh 3.1 ta rt ra nhn xt rng: khi user request vo trang index.aspx th controller s x l yu cu ca user bi action Index(), khi user request mun xem thng tin
Hnh 3.2: Controller p ng request t user 3.1.2 Controller Actions l g ? - Sau khi controller xc nh v gi action no th action c nhim v tr kt qu v cho trnh duyt. Mt controller c th tr v mt view, mt file, hoc a chng ta n mt action khc * Controller action lun tr v mt ActionResult. B khung ASP.NET MVC bao gm cc kiu tr v nh sau: website th cotroller s p ng bng vic gi action About()
Trang 19 Phng thc Kiu tr v View() ViewResult: miu t mt view ca ASP.NET MVC. PartialView() PartialViewResult: miu t mt phn(fragment) ca ASP.NET MVC view. Redirect() RedirectResult: Miu t chuyn hng n controller action hoc URL khc Content() ContentResult: gi ni dung th v cho trnh duyt. File() FileResult: miu t mt file c ti xong RedirectToRoute() RedirectToRouteResult: miu t chuyn hng hot ng n controller action hoc URL s dng cng gi tr nh tuyn (route ) RedirectToAction() Tr v mt RedirectToRouteResult Mt s v d:
Hnh 3.3: code tr v mt ViewResult
Hnh 3.4: code tr v mt RedirectResult c. Tr v mt ContentResult a. Tr v mt ViewResult b. Tr v mt Redirect Result
Trang 20
Hnh 3.5: code tr v mt ContentResult
Hnh 3.7: Kt qu chy th code ContentResult * Nh vy, qua cch v d trn ta bit c cch hot ng ca controller nhng d. Tr v mt fileResult Hnh 3.6: code tr v mt ContentResult
Trang 21 lm th no cotroller nhn bit hai hm cng tn, gi action no hot ng khi thao tc form d liu, hoc yu cu cc phng thc c bit khi mt nhn request t Ajax a. s dng AcceptVerbs: Thuc tnh AcceptVerbs ngn chn mt action c yu cu m khng c thao tc HTTP Post hoc Get. V d
Hnh 3.8 Ngoi ra, giao thc HTTP cn h tr mt s thao tc HTTP khc na nh: options, head, put, delete, trace, connect. Chng ta c th thc thi cc thao tc HTTP trn
Hnh 3.9 b. s dng ActionName: ActionName c dng trin khai mt action vi tn khc hn l tn phng thc ca n. ActionName l hu ch khi: - Khi controller cn ghi phng thc cng tn - Khi mt controller c cc phng thc khc nhau nhng chng ta mun nhng phng thc ny hot ng nh mt phng thc cng tn. khi thc thi request Ajax nh sau:
Trang 22
Hnh 3.10 c. s dng ActionMethodSelector: i khi chng ta mun xy dng cc thuc tnh ca ring mnh v controller c th gi mt action n thuc tnh ca chng ta. n gin chng ta ch cn xy dng thuc tnh k tha lp ActionMethodSelectorAttribute. V d: u tin ta xy dng mt lp n gin c t tn l AjaxMethod, lp ny ghi phng thc IsValidForRequest(). Nu kt qu tr v l false th phng thc
V d: action s khng c yu cu Hnh 3.11
Trang 23 Hnh 3.13 *Ngoi l iu khin cc action khng tn ti (handling unknown action): Khi mt action no c khai bo trong controller, trong khi action ny khng thc thi c khi n pht sinh li 404 Resource Not Found HTTP. Tuy nhin, chng ta c th x l
Hnh 3.14 Hnh 3.15 3.2 Views 3.2.1 Views l g ? View trong ng dng ASP.NET MVC c xem l giao din ca ng dng, View c tc dng tr v cho trnh duyt trang HTML khi ngi dng gh thm website ca chng ta. Views cha cc tag tng t nh HTML, chng ta c th t mi th vo trong view nh hnh nh, iframes, java applets, flash v silverlight. 3.2.2 To Views nh th no ? Cch to view d nht l nhp chut phi vo li ny bng cch ghi phng thc HandleUnknownAction() Hnh 3.12
Trang 24 action no trong controller chn Add View
Hnh 3.16 Thm mt view mi t controller action
Hnh 3.17 S dng hp thoi View (View Dialog)
Hnh 3.18 Ni dung c bn ca mt view - Trong view frmDangKi.aspx chng ta va to cha 2 tag <asp:content>,
Trang 25 tag <asp:content> u tin s xut hin trong tag <title> ca vn bn HTML, tag <asp:content> th hai s xut hin trong tag <body> ca vn bn HTML. * Lu : chng ta c th tch hp cc scrip vo trong view thng qua <% %>
Hnh 3.19 Cch chn scripts vo trong view 3.2.2 S dng Views nh th no ? - i lc chng ta mun truyn thng tin qua li gia View v Controller, n gin chng ta s dng c ch ViewData c h tr bi ASP.NET MVC . Trong , ViewData c th miu t bt k loi thng tin no nh strings, objects v cc mu tin c s d liu -ViewData ging nh kiu t in, n bao gm cp thuc tnh kha v gi tr, trong , kha phi l chui, cn gi tr c th l bt k kiu d liu g. - Khi s dng ViewData, chng ta ch cn p kiu v kiu d liu mong mun, v n c th cha bt k kiu d liu no nn khi gn d liu cho ViewData, ViewData t dng gn v kiu objects - V d :
Trang 26
Hnh 3.22 Kt qu thu c Nu nh chng ta khng mun s dng view bng cch p kiu, chng ta c th to mt strongly typed view, khi t in viewdata trin khai mt thuc tnh c t tn l Model
Hnh 3.20 Cch to ViewData trong controller Hnh 3.2 1 Cch dng ViewData trong View
Trang 27
Hnh 3.24 B sung strongly typed view vo trong view
Hnh 3.25 Cch s dng strongly typed data trong view 3.3 Models 3.3.1 Models l g ? - Models cha tt c cc x l mang tnh nghip v, tnh logic trong truy xut c s d liu, cng nh tnh hp l trong ng dng. Ni cch khc, model cha tt c cc logic ng dng, ngoi tr logic view v controller. 3.3.2 To Database: minh ha cch to DataModel, trc ht chng ta cn bit cch to c s d liu bao gm cc bc sau: - Nhp phi chut vo th mc App_Data, chn Add, chn NewItem
Hnh 3.23 Cch to strongly typed view
Trang 28 Hnh 3.26 - Chn Item Sql Server Database, v g Products.mdf vo textbox Name, chn Add
Hnh 3.27 - Sau khi thm mi c s d liu, n s nm trong th mc App_Data, trong ca s Server Explorer, nhp phi chut vo th mc Tables, chn Add New Table, Table gm 4 ct. Ct u tin l Id l kha chnh v mang gi tr t ng tng
Hnh 3.28 3.3.3 To Data Model vi Microsoft Entity Framework - Nhp phi chut vo th mc Model trong ca s Solution Explorer, chn Add, New Item. - Trong hp thoi Add New Item, trong Categories nhp vo mc Data, trong Templates nhp chn ADO.NET Entity Data Model, trong mc name g DataModelProducts.edmx
Trang 29
Hnh 3.29 - Trong bc choose model contents chn item Generate From Database, nhp Next
Hnh 3.30 - Trong bc Choose your data connection, nhp products.mdf cho data connection, v g ProductsDBEntities cho vic thit lp tn kt ni.
Trang 30 Hnh 3.31 - Trong bc Your Database Object, chn table Products v nhp tn namespace l ProductsModel.
Hnh 3.31 - Sau khi nhn nt finish, kt qu l
Hnh 3.32
Trang 31
Hnh 3.33 * Gii thiu cc thao tc trn c s d liu s dng ProductsDBEntities v class Product
Hnh 3.34 Khai bo i tng thao tc trn CSDL a. Hin th tt c mu tin c trong c s d liu: - Nhp phi vo action Index trong controller Home chn Add View
Trang 32 Hnh 3.35 - To strongly-typed view v trong View Content chn List, nhn Trang 33 Add
Hnh 3.36
Hnh 3.37 b. Hin th mt mu tin duy nht - Nhp phi chn add view cho action Details trong controller
Hnh 3.38 - Kt qu - To strongly-typed view v trong View Content chn List, nhn Trang 34 Details
Hnh 3.39
Hnh 3.40 c. To mi mu tin
Hnh 3.41 - Kt qu - Nhp phi chn add view cho action Create trong controller - To strongly-typed view v trong View Content chn List, nhn Trang 35 Create
Hnh 3.42
Hnh 3.43
Hnh 3.44 d. Chnh sa mu tin - in thng tin sn phm mi - Kt qu
Trang 36
Hnh 3.45 - To strongly-typed view v trong View Content chn List, nhn Edit
Hnh 3.46 - Kt qu trc khi chnh sa
Hnh 3.47 - Chnh sa thng tin sn phm - Nhp phi chn add view cho action Edit trong controller
Trang 37
Hnh 3.48 - Kt qu sau khi chnh sa
Hnh 3.49 e. Xa mu tin
Hnh 3.50 - To strongly-typed view v trong View Content chn List, nhn Delete
Hnh 3.51 - Nhp phi chn add view cho action Delete trong controller
Trang 38
Hnh 3.52
Hnh 3.53
Hnh 3.54 3.3.4 S dng Linq to Sql trong ASP.NET MVC - Linq to sql c Microsoft gii thiu nm 2007 nh l mt phn ca .NET 3.5, n c thit k gip chng ta gim ti mt s lng ln on code cn vit khi thao tc truy xut c s d liu, v gip chng ta thot khi gnh nng trong vic to v duy tr stored procedure cho mi loi query chng ta cn thc thi. N l mt cng c ORM(Objectrelational mapping), n cha tt bng Nhibernate, nhng i khi n d dng s dng. - Kt qu trc khi xa - Xem thng tin mu tin trc khi xa - Kt qu sau khi xa
Trang 39 - Cch s dng Linq to Sql rt n gin, t trong mi trng Visual Studio, chng ta ko v th cc tables v stored procedures vo trong tm bc(ca s do visual to ra khi thao tc ko th c s d liu), sau , chng ta s dng cc cu lnh truy vn Linq bn trong code C#, v nhn ly cc thc th ny t data context (n chuyn cu truy vn t Linq sang Sql lc thc thi), thay i chng bn trong C#, sau gi SubmitChanges() vit nhng thay i ny ngc tr li c s d liu. - V d : a. To c s d liu (dng cng c Sqlserver Express 2005). Sau khi to xong c s d liu to c c nh sau:
b. Xy dng lp newProduct c cc thuc tnh tng ng vi cac column trong bng Products. Trong ca s Solution Explorer, nhp phi th mc Models chn Add, Class, t tn class l newProduct.
Trang 40 c. To mt interface c phng thc c gi l IproductRepository, c dng to ra mt view hng i tng lu tr ngm nh cc gi tr ca newProduct.
d. trnh vit cc cu truy vn Sql hoc stored procedure, chng ta cn ci t v s dng Linq to Sql. Do chng ta nh ngha thc th nh l mt lp C# (Product), by gi chng ta c th nh x n n cc bng tng ng trong c s d liu bng cch thm mt s thuc tnh mi nh sau:
- Update lp Product nh sau : - Tham chiu n th vin System.Data.Linq
Trang 41
e. To lp SqlProductsRepository, y l lp dng kt ni n c s d
liu tht s ca chng ta. f. Lit k cc sn phm c trong c s d liu
Trang 42
* B sung cc thao tc CRUD (Create, Read, Update, Delete) cho
Bc 2: thc hin cc thao tc CRUD a. Lit k d liu c sn (thao tc Read): thao tc ny khng c g khc so vi thao tc lit k d liu c sn khi s dng k thut Microsoft Entity Framework khi thao tc c s d liu g. Chy th ta c kt qu Controller Bc 1: khi to i tng kt ni c s d liu
Trang 43
b. Cp nht d liu (thao tc Update): thao tc ny khc vi thao tc trong Microsoft Entity Framework nh sau: - Chng ta b sung phng thc SaveProduct(newProduct product)
c. Thm mi sn phm - Khai bo action Create() trong controller CRUD trong lp SqlProductRepository nh sau: - Khi thc hin thao tc update c s d liu ta thc hin nh sau : - Kt qu
Trang 44
- Trong trng hp chng ta mun form lun post n action Edit ta b sung thm tham s nh hnh bn di
d. Xa bt sn phm - Chng ta b sung phng thc DeleteProduct(newProduct product) trong lp SqlProductRepository nh sau:
- Kt qu t c sau khi thm mi l : - Khai bo s dng trong action Delete ca controller CRUD
Trang 45
3.5 URLs v Routing - Khi chng ta request mt trang t ng dng ASP.NET MVC, th request s c chuyn tip n mt controller no trong ng dng. V thc hin iu ny chng ta cn n tnh nng gi l Routing trong ng dng ASP.NET MVC
- Tp tin Global.asax cha hai phng thc chnh c t tn l Application_Start() v RegisterRoutes(). Trong , phng thc Application_Start() ch c gi mt ln duy nht khi ng dng ASP.NET ln u tin chy, v cng vic ca n n gin l gi phng thc RegisterRoutes() - Phng thc RegisterRoutes() th c s dng cu hnh tt c cc routes trong ng dng, v n c route mc nh l: - Kt qu khi chy chng trnh - Khi to mi mt ng dng ASP.NET MVC, ta c file Global.asax nh sau :
Trang 46
- Chng ta cu hnh route mi bng vic gi phng thc MapRoute(), phng thc ny chp nhn cc tham s sau: + Name: tn ca route + URL: mu(pattern) url dnh cho route + Defaults: gi tr mc nh cho cc tham s route + Constraints: tp cc rng buc nhm gii hn cc request nhm tm ra route ph hp nht. + Namespaces: tp cc namespace nhm gii hn cc lp nhm tim ra route ph hp nht. - Phng thc MapRoute() c th c ghi , chng ta c th gi phng thc MapRoute() m khng cn s h tr ca cc tham s Defaults, Contraints, hoc namespace. - Tham s URL dnh cho route Default c mu(pattern) nh sau {controller}/ { action}/{id}. Do , route mc nh dnh cho URL c nhng dng nh sau : + /Product/Insert/ 23 + /Home/Index/ 1 + /Do/Something/Useful - V n khng so khp vi URL sau: /Product/Insert/Another/Item. (V mu url mc nh c 3 phn, trong khi ta request url 4 phn). - Mu URL {controller}/{action}/{id}, vi tham s controller, action l c bit. ASP.NET MVC framework dng tham s controller quyt nh loi controller MVC no c s dng iu khin request t client. Trong khi , tham s action miu t action no c controller s dng response li request do client yu cu.
Trang 47 - Nu chng ta thm vo cc tham s khng c t tn controller hoc action, th chng c s dng nh nhng tham s c truyn n cc controller action. - Theo mc nh, tham s controller c gi tr mc nh l Home, tham s action c gi tr l Index, v tham s id c gi tr l (chui rng). - V d: vi website http://www.mysite.com/product, cc tham s c gi tr tng ng l Controller = Product, Action = Index, Id = , v cc gi tr ny cng p dng cho url: http://www.mysite.com, hoc ta c url sau: ~/Archive/12-25-1966, khi route c cc gi tr tham s nh sau:
- S dng rng buc HttpMethod: i khi chng ta mun ngn cn URL c bit no khi vic truy xut khi thc thi mt HTTP Get, khng phi l thc thi HTTP Post.
Ngoi ra, ASP.NET MVC cn h tr mt s rng buc (constraint) khc nh: Authenticated, NotEqual, Catch-ALL contrainst. *Lu : nu trong fiel global.axas c nhiu route entry, th h thng khng hng n vic tm route no ph hp nht, thut ton ca n n gin l bt u t trn xung, v
Bi v, /DailySpecials/March-31 ph hp vi route u tin nn route u tin s c thc hin. kim tra tng route, v dng khi c route u tin ph hp.
Trang 48 3.6 View Master Page v User Control Page : 3.6.1 View Master Page: Mc ch chnh ca View Master Page l duy tr b cc trang trn ton b website. a. To mt view master page: Thng thng, master page ph hp cho tt c cc view, chng ta to master page trong th mc \Views\Shared, nhp phi chut chn Add, New Item. Trong danh mc web chn MVC View Master Page, sau nhn nt Add
b. To view content page: sau khi to xong view master page, chng ta c th to mt hay nhiu view content pages da trn master page nh sau: - T mt action controller no trong controller, nhn phi chut chn Add View. - Kt qu ta c c ni dung trang master page nh sau :
Trang 49
- Chn master page, ci m c p dng cho view
c. Thit lp master page t Controller: S thun li ca phng thc ny - Kt qu thu c l :
Trang 50 l chng ta c th la chn trang master ng ti thi gian chy V d, gi s ta c 2 trang master page l MP1 v MP2, v d sau minh ha bng cch no, chng ta c th la chn trang master vo thi gian chy. - Bc 1: Khai bo thm thuc tnh trong view
d. Cc trang master page lng nhau: - Bc 2: Chy th v thu c kt qu sau
Trang 51
- Bc 1: To master page 1 - Bc 2: To trang master page 2, import master page 1 - Bc 3: to view s dng master page 2
Trang 52
e. Truyn d liu n master page - Bc 1: To lp c s cho tt c cc controllers (Application controller chng hn), khi , ta ch cn thay i view data ch trong lp controller (vic xy dng ny nhm trnh nguyn l DRY (Dont Repeat Yourself): lm cho code ca chng ta d dng duy tr).
- Bc 4: chy th v thu c kt qu
Trang 53
- Bc 3: Ly d liu trong view
- Bc 2: To controller k tha t controller trn
Trang 54
3.6.2 User Control Page a. To view user control - View user control miu t mt phn ca view. Mt khc, user control cho php chng ta ng gi ni dung trc quan (visual content) m cng mt ni dung c th c hin th trong nhiu view khc nhau. Mt user control c th cha (X)HTML v script. - Nhn phi chut vo th mc \Views\Shared (v chng ta mun s dng user control trn nhiu views khc nhau), chn Add, View
- Bc 4: Kt qu thu c
Trang 55
- Sau khi to xong mt user control, chng ta c th s dng n trong view bng cch gi phng thc Html.RenderPartial(). Lu , v Html.RenderPartial() khng tr v chui, do ta dng script <% %> thay v s dng script <%= %>
- Gi s view user control ny cha danh sch cc items mi nh sau :
Trang 56
b. Truyn d liu t controller n ViewUserControl
- V kt qu thu c l - Bc 1: Thay i ni dung trang user view control nh bn di
Trang 57
c. s dng View User Control nh mt template - Bc 1: To mt controller mi (Ly v mt danh sch cc mu tin trong c s d liu)
- Bc 2: To mt View, dng hin th thng tin - Bc 2: Kt qu thu c
Trang 58
- Bc 4: kt qu thu c Bc 3: To mt view user control dng tr v mt hng trong table
Trang 59
3.7 HTML Helpers 3.7.1 HTML Helpers l g ? - HTML Helpers trong view, n hon tr li ni dung HTML, phn ln n ch l phng thc tr v mt chui. Chng ta c th xy dng ng dng ASP.NET MVC m khng cn HTML Helpers, tuy nhin, HTML Helpers gip cho cc nh pht trin Web d dng thao tc hn trong vic code HTML. 3.7.2 Cc phng thc c sn trong HTML Helpers - HTML.ActionLink(), n khng lin kt n mt view, thay vo n lin kt n mt action controller.
HTML.ActionLink() helpers c vi phng thc ghi vi cc tham s nh + linkText: tn link + actionName: l tn action controller m link cn hng n + routeValues: tp cc gi tr c truyn n action + controllerName: l tn controller m link cn hng n
Trang 60 + htmlAttributes: tp cc thuc tnh HTML c thm vo link + protocol: giao thc dnh cho link (v d: HTTPs ) + hostname: hostname dnh cho link + fragment: fragment dnh cho link. (v d: link ti mt th div trong view vi id l news, ta s ch nh news cho fragment
- Url.Action() helpers: dng to ra link da trn hnh nh V d:
- Ngoi ra cn c cc HTML Helpers khc nh: BeginForm(), CheckBox(), DropDownList(), EndForm(), Hidden(), ListBox(), Password(), RadioButton(),
TextArea(), TextBox().
Trang 61
- Html.BeginForm(): hon tr mt form dng HTML cho view.
Theo mc nh, Html.BeginForm() s tr v mt form dng post back ti cng action controller. Nu mun post n action khc, ta ch vic thay i cc gi tr tham s ca phng thc BeginForm() nh sau: + routeValues: tp cc gi tr c truyn ti action + actionName: tn action m form mun post ti + controllerName: tn controller m form mun post ti. + Method: phng thc HTTP m form post ti (cc gi tr c th c ca n l POST hoc GET, bn khng th s dng cc phng thc HTTP khc bn trong HTML, chng ta phi dng Javascrip) + htmlAttributes: tp cc thuc tnh HTML thm vo form -Html.DropDownList() helper: hon tr mt tp cc mu tin trong c s d liu v dng tag <select> ca HTML. V d:
+ Bc 2: khai bo s dng trong View + Bc 1: Xy dng mt danh sch cc phn t cho dropdownlist
Trang 62
3.7.3 B sung cc phng thc ng trong HTML Helpers - ASP.NET MVC ch h tr mt s HTML Helpers, i lc chng ta cn b sung thm mt s helper mi. Tht may, ASP.NET MVC c h tr tnh nng thm mi helpers, gi nh ta xy dng nt submit, cc bc lm nh sau:
2. cc view c th nhn thy cc phng thc helper bn va mi to, c 2 cch thc hin
+ cch 2: import trc tip vo trong view cn s dng helper bn va mi to + Bc 3: Kt qu 1 . Xy dng phng thc nutSubmit() tnh thuc lp Helpers tnh nh sau: + cch 1: khai bo namespace trong file web.config
Trang 63
Gi s ta g: <%= Html.nutSubmit("MyHelpers") %> Ta c kt qu l:
* Ngoi ra ta c th xy dng mt s helpers hu ch nh 1. TagBuilder: y l lp rt hu ch trong ASP.NET MVC, chng ta c th s dng chng khi xy dng HTML helpers, n c cc phng thc sau: + AddCssClass(): Cho php chng ta thm mt lp mi n 1 tag + GenerateId()- cho php chng ta thm thuc tnh Id n 1 tag + MergeAttribute()- cho php chng ta thm thuc tnh n tag, v c nhiu phng thc ghi phng thc ny. + SetInnerText()- Cho php chng ta thit lp inner text ca tag, chng ta c th ch nh rng chng ta s to tag bnh thng, tag bt u, tag kt thc, hoc l tag t ng cho chnh n. V lp TagBuilder c 4 thuc tnh quan trng sau: + Attributes: miu t tt c cc thuc tnh ca tag + IdAttributesDotReplacement: miu t c im c s dng bi phng thc GenerateId() + InnerHTML: miu t ni dung bn trong ca tag, vic gn 1 chui n
Trang 64 thuc tnh ny khng m ha chui HTML. + TagName: miu t tn ca tag V d: + bc 1: Xy dng mt phng thc helper t to c tn l
+ bc 2: khai bo s dng trong View
2. S dng lp HtmlTextWriter: HtmlTextWriter c xem nh l s thay th PageLinks() + bc 3: kt qu t c
Trang 65 cho lp TagBuilder m ta xy dng trn, di y l mt s phng thc c bit dnh cho vic xy dng chui HTML. + AddAtrribute(): Thm thuc tnh HTML, khi phng thc RenderBeginTag() c gi, thuc tnh ny c thm vo tag. + AddStyleAttribute(): Thm thuc tnh style, khi phng thc RenderBeginTag() c gi, thuc tnh ny c thm vo tag. + RenderBeginTag(): hon tr vic m tag HTML + RenderEndTag(): ng tag cui cng c m vi RenderBeginTag (). + Write(): vit text n lung xut d liu(output stream). + WriteLine(): vit mt dng mi n lung xut d liu. V d:
+ Bc 2: Khi to d liu
+ Bc 3: khai bo s dng trong View + Bc 1: Xy dng phng thc helper BulletedList( )
Trang 66
Ni tm tt, vi kh nng cho php t to cc HTML Helpers, chng ta c th to ra v s helpers hu ch ty vo tng trng hp c th. 3.8 Validation Form Data: Validation form data cho php chng ta kim tra xem liu ngi dng nhp ng d liu c yu cu hay cha. V trong ASP.NET MVC, chng ta miu t li hp l (validation errors) ca form bi thut ng model state dictionary. 3.8.1 Model State l g ?Model state, bn thn n ging nh mt cun t in, cha mt tp cc trng thi mu (Model state), nhm biu din trng thi ca cc thuc tnh c bit. Chng ta truyn li hp l t action controller n view v ngc li, bng vic truyn thng qua t in miu t trng thi mu (model state dictionary). C hai lp controller v view u cha thuc tnh c t tn l ModelSate, thuc tnh ny trin khai t in trng thi mu (exposes the model state dictionary). 3.8.2 Validation Helpers: l mt trong s cc cch bn c th s dng pht hin tnh khng hp l do ngi dng nhp sai. V d + Bc 1: khai bo kim tra li trong action testModelState trong controller Home. + Bc 4: Kt qu
Trang 67
+ Bc 3: nhp th d liu l kim tra kt qu + Bc 2: Khai bo form nhp liu.
Trang 68
Nh v d trn ta thy rng, li hp l c thm vo model state vi phng thc AddModelError(), phng thc ny chp nhn 2 tham s: kha v chui thng bo li. Nu bt k li no c thm vo model state, thuc tnh ModelState.IsValid tr v false, ngc li l true. 3.8.3 Validating with the IDataErrorInfo Interface: IdataErrorInfo interface l cch th hai do ASP.NET MVC h tr trong vic gip cc nh pht trin Web kim tra tnh hp l, v Interface IdataErrorInfo c cu trc nh sau: public interface IDataErrorInfo { // Properties string Error { get; } string this[string columnName] { get; } } + Bc 1: k tha interface IdataErrorInfo
Trang 69 + Bc 2: Khai bo s dng trong action testModelState trong home
* Styling validation Error message: ASP.NET MVC cn h tr cho chng ta mt s style css nhm thay i mu sc cc textbox, listbox, gip ngi dng d dng quan st v
Trong , controller + Bc 3: Chy th v c kt qu nh sau : tr d liu khng hp l nh sau:
Trang 70 + field-validatioin-error: c p dng cho cc tin nhn li c hon tr bi Html.ValidationMessage() + input-validation-error: c p dng cho cc field ca form c hon tr bi Html.TextBox() hoc Html.TextArea(). + validation-summary-errors: c p dng cho c tag <span> v <ul>, n c hon tr bi Html.ValidationSummary(). 3.9 Model Binders v Action Filters 3.9.1 Model Binders: Mt model binder c tc dng nh x mt request t browser vo trong mt i tng. - V d: ta c mt view cha ng mt form HTML n gin cho vic to mi mt sn phm sau:
- Khi chng ta submit form, iu c ngha l chng ta submit form n
action controller Create(newProduct product) trong controller Home nh bn di:
Trang 71 - Nh v d trn ta thy, action controller chp nhn tham s Product. Model binder y l model binder mc nh, tng ng nh vic to i tng mi cho lp Product. Model binder cng iu khin vic gn cc gi tr ca cc field trong form HTML n cc thuc tnh ca lp Product - ASP.NET MVC cung cp cho chng ta 3 loi model binder khc nhau nh sau: + Model binder mc nh (default model binder ) + Form collection model binder + HTTP posted file da trn model binder (HTTP posted file base model binder) a. S dng Model Binder default: model binder mc nh tt c th to ra cc loi i tng khc nhau t mt request ca browser, bao gm cc loi nh: + Cc kiu thng dng nh: string, decimal, hoc datetime. + Cc class nh Product hoc Customer (nhng class t xy dng ) + Mng nh Product, string + Tp hp nh Ienumerable<T>, Icollection<T>, Ilist<T>, T[], Collection<T>, v List<T>. + T in nh Idictinary<Tkey, Tvalue> v Dictionary<Tkey, Tvalue> *S dng cc thuc tnh ca Bind - Chng ta co th s dng cc thuc tnh ca Bind i vi cc control, nhm bo cho model binder bng cch no chuyn mt request vo trong mt i tng, n c cc thuc tnh sau: + Exclude: Cho php chng ta loi b danh sch cc thuc tnh c phn cch bi du phy ra khi binding. + Include: cho php chng ta thm danh sch cc thuc tnh c phn cch bi cc du phy trong binding. + Prefix: cho php chng ta kt giao mt tham s vi mt tin t ca 1 field trong form. * Thng thng chng ta hay s dng thuc tnh Exclude, v d khi ta thao tc c s d liu, trng ID l thuc tnh t tng, nn chng ta khng mun bind mt trng
Trang 72
- Nu nh chng ta khng mun exclude ProductID t phng thc, chng ta c th exclude ProductID ngay trong lp Product nh sau:
- V khi xy dng action controller Create, chng ta khng cn b sung
b. s dng Form Collection Model Binder: nh mt s thay th cho model binder mc nh, chng ta c th s dng form collection model binder truyn cc tham s t view n action controller. Trong , form collection model binder miu t mt tp cc trng ca form khng xc nh kiu. V d: Trong action Create() chp nhn tham s l mt form collection. trn form i vi thuc tnh ny v d nh: thuc tnh exclude na
Trang 73
Trong v d trn, phng thc UpdateModel() c tc dng gn cc trng form ti i tng myProduct ca lp Product. Phng thc UpdateModel() h tr mt s tham s sau: + model: i tng hng n vic binding + prefix: ch cc field ca form vi tin t ny mi c th c bound vi model + includeProperties: mt mng cc thuc tnh c thm vo khi binding + excludeProperties: mt mng cc thuc tnh c loi tr khi binding. + valueProvider: ngun thng tin c s dng trong sut qu trnh binding. V tht ra, chng ta khng cn truyn tham s form collection n phng thc UpdateModel(), mc d action Create khng cn truyn tham s m phng thc
c. S dng HTTP Posted file da trn Model Binder: Model binder ny Trong action ny, chng ta s kt hp cc field ca form vi i tng ca class Product UpdateModel() vn lm vic.
Trang 74
3.9.2 Action Filters - Mt action filter cho php chng ta thc thi code trong mt s tnh hung sau: + Ngay trc khi mt controller action c thc thi + Ngay sau khi mt controller action c thc thi + Ngay trc khi mt kt qu action result c thc thi + Ngay sau khi mt kt qu action result c thc thi. - Mt action filter l mt thuc tnh, chng ta c th p dng cho mt controller action hoc ton b controller. V d cc thuc tnh nh OutputCache, HandleError v Authorize u s dng action filters. - V d, chng ta xy dng mt action filters theo di cc s kin action, sau xut ra ca s output ca Visual Studio. + Bc 1: Xy dng lp LogAttribute k tha t lp ActionFilterAttribute v ln lt ghi cc phng thc nh: OnActionExecuting, OnActionExecuted, cho php ta truyn file c upload n mt controller action.
Trang 75
3.10 Chng thc Users a. To users - Chng thc users c s dng khi chng ta ch cho php cc user hp OnResultExecuted, OnResultExecuting + Bc 2: Khai bo s dng trong Controller + Bc 3: Chy ch debug, ta c kt qu nh sau :
Trang 76 l mi c th truy cp vo website c. Chng ta c 2 cch l, th nht dng website administration tool, th hai l dng Account controller. + Cch 1: T ca s Visual Studio, chn chn Asp.net configuration t mc project. Sau khi website Administration tool khi ng xong, chng ta c th to mi users cng cc quy tc cho cc users. (Lu : hy chc chn l ng dng ca chng ta c bin dch t nht 1 ln, nu khng s xut hin li Could Not Load Type ten_ung_dung khi chng ta clik vo tab security)
+ Cch 2: s dng Account Controller: Nu chng ta cn to users (khng bao gm cc vai tr), chng ta c th s dng Account controller, ci ny c thm mc nh vo ASP.NET MVC khi ln u tin to ng dng MVC. + To ng dng MVC mi, chy n + Nhn vo link [Log On ] + Nhn vo link Register
Trang 77 + Hon thnh form ng k to user mi. b. Chng thc users: Nu chng ta ch mun nhng user no c vai tr c th no mi c quyn truy cp vo cc action controller, chng ta s dng thuc tnh Authorize c h tr sn trong ng dng MVC (Chng ta c th chng thc trn tng action controller hoc trn ton controller)
* Trong v d trn, ta thc hin chng thc trn tt c cc user, nu chng ta ch
Nh v d trn ta thy, ch c user abc l c quyn Delete Sn phm. Nu mun cho php nhiu users c kh nng dng action Delete, ta ch cn thm du phy ngn cch cc users chng hn nh: [ Authorize(Users=Jack,Jill )] c. Chng thc user bng vai tr ca users: gii hn mt nhm users no mun chng thc ch i vi mt s user no ta dng nh sau:
Trang 78 mi c kh nng s dng action controller no , ta c th s dng tnh nng ny. V d
* Nh vy cho n by gi, ta vn khng bit nhng user account chng ta to ra ang nm u. Theo mc nh, username v password c lu vo trong csdl SQL Express c t trong file ASPNETDB.mdf, c t trong th mc App_Data. V file ASPNETDB.mdf l file n, hin th ta lm nh sau:
3.11 S dng Unit Test trong ASP.NET MVC - Khi to ng dng ASP.NET MVC mi, Visual nhc nh chng ta thm d n test vo cng thi im to ng dng, v khung test mc nh l Visual Studio Unit Test.
Trang 79 - C 2 cch chng ta c th to 1 khi test mi + Cch 1: 1. Nhp phi chut vo th mc Controller, chn Add, New Test. 2. Trong hp thoi Add New Test chon UnitTest. 3. Nhp tn khi Test ca chng ta, nu chng ta ang test cho controller Product, ta t tn l ProductControllerTests.
4. Chn nt OK
+ Cch 2: 1. Nhp phi chut vo th mc controller, chn add, class. 2. Trong hp thoi Add New Item, t tn lp l MyClass_Test, v chn nt Add - Kt qu sau khi to khi test mi
Trang 80
3. Thay i class class tr thnh public
* Hiu cc thuc tnh ca Test 1. TestClass: nh du mt lp nh l mt lp cha cc phng thc test 2. TestMethod: nh du mt phng thc nh l phng thc test 3. TestInitialize: nh du mt phng thc, c chy ngay lp tc trc mi phng thc test. - Thng thng th mt khi test u kt thc vi mt assertion. Khung test do Visual Studio Unit Test to ra bao gm ba loi lp m bn c th s dng thc hin assertions l + Assert: lp chnh cho vic thc thi assertions + CollectionAssert: lp ny cha ng cc phng thc assertion c bit cho tp cc i tng. 4 . Thm thuc tnh TestClass vo lp mi to
Trang 81 + StringAssert: lp ny cha ng cc phng thc assertion cho chui - Trong phn ln cc trng hp, chng ta s dng lp Assert, v d Assert.AreEqual() xc nhn cc gi tr tht s c bng gi tr mong i khng. S dng Assert.IsInstanceOfType() xc nhn mt i tng c bit c kiu c th no khng? - Nu chng ta lm vic vi collection, chng ta c th s dng lp CollectionAssert, v d CollectionAssert.AreEqual() cho php chng ta kim tra xem hai tp hp c cng cc items theo cng trnh t hay khng. Cn CollectionAssert.AreEquivalent() kim tra xem hai tp hp c cng items khng, nhng khng cn thit ging trnh t. - Cui cng, StringAssert cho php chng ta thm nh v chui. V d, StringAssert.Contains() cho php chng ta kim tra xem mt chui c cha chui con c bit no hay khng, cn StringAssert.Matches() cho php chng ta kim tra xem mt chui c ph hp vi mu biu t qui tc c th hay khng? - Visual Studio cung cp cho chng ta 4 ty chn cho vic chy test nh sau : + Chy test ch ng cnh hin ti + Chy tt c cc test trong Solution + Debug test ch ng cnh hin ti + Debug tt c cc test trong Solution - Ng cnh c c xc nh bng v tr con tr chut. V d, nu chng ta nhp vo phng thc myMethod() v la chn test bng current context, khi ch c phng thc myThod() l chy test. - Chy test ch debug l hu ch khi chng ta cn thit lp im nhn cho vic test.
V d: To unit test i vi Controller v action: Gi s mt controller c 2 action l Index() v ViewMaps(), nu chng ta gi action ViewMaps() m khng truyn tham s id, khi chng ta nn quay v action Index()
Trang 82
Vi mc ch trn, ta xy dng khi test nh sau:
Trang 83 5. Trin khai ng dng ASP.NET MVC - Trin khai ng dng web l vic ci t ng dng web ln web server n c th c truy xut bi ngi dng. - Cc yu t cn thit cho vic trin khai ASP.NET MVC l + IIS phin bn 5.1 tr ln + .Net framework phin bn 3.5 5.1 Ci t IIS 7.0 trn window 7 - Vo control panel, chn category Programs (Unistall a program) (Ch ViewBy l Category), xut hin mn hnh nh sau:
- Xut hin hp thoi
Trang 84
- Chn cc checkbox ging nh hnh trn, nhn ok. - Sau khi chn xong, vo control panel, i ch viewby l Large icons, chn mc Administrative Tools
- Nhn vo mc IIS ta thy xut hin trnh qun ly IIS nh bn di
Trang 85
- Sau khi ci xong IIS, m browser, g localhost vo thanh address ta c kt qu sau:
5.2 nh x ng dng web asp.net MVC C 2 cch: a. Trin khai web mvc ln localhost bng chnh cng c visual studio - Nhp phi chut vo project, chn property
Trang 86
- Sau khi chn xong, nhn vo nt Create Virtual Directory - Kt qu sau khi visual studio thc hin a web ln localhost. - Xut hin ca s thuc tnh, v cu hnh nh hnh bn di
Trang 87
b. Trin khai web trn localhost bng trnh qun l IIS - Vo trnh qun l IIS, chn nh hnh bn di
Trang 88
- Nhp thng tin nh bn di
- Sau khi nhp xong thng tin, nhn ok, sau nhp phi vo th mc va mi to, v chn Convert to Application.
- Cui cng, nhp phi chut vo ng dng web nh hnh bn di, v ta thu c kt qu nh cch lm 1.
Trang 89
6. Tch hp Ajax vo ASP.NET MVC 6.1 Ajax l g ? Asynchronous JavaScript and XML AJAX l k thut to ra trang web nhanh v ng. AJAX cho php trang web update bt ng b bi s thay i mt s lng nh ca d liu vi thng tin c ly t server. Ngha l n c th upadate mt phn trang web m khng cn load li trang. Cc ng dng s dng ajax: Google Maps, Gmail, Youtube, and Facebook tabs. 6.2 Ajax hot ng nh th no ?
Trang 90
6.3 Ajax s dng kt hp ca a. i tng chnh ca AJAX l XMLHttpRequest. - Hu ht cc trnh duyt iu h tr i tng XMLHttpRequest(IE5 v IE6 s dng ActiveXObject) - i tng XMLHttpRequest c s dng request thng tin t server. - to i tng XMLHttpRequest cho cc trinh duyt bn s dung don code sau function loadXMLDoc(url) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); xmlhttp.open("GET",url,false); xmlhttp.send(null); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("GET",url,false); // Do not send null for ActiveX xmlhttp.send(); } document.getElementById('test').innerHTML=xmlhttp.responseT ext; } b. JavaScript/DOM : c s dng hin th v tng tc d liu. c. XML: Thng s dng nh l nh dng truyn d liu.
Trang 91 6.4 Send an AJAX request to a Server gi request n server, bn s dng phng thc open() v send() ca i tng XMLHttpRequest. Method Description Open(method,url,async) Ch ra kiu ca request, url v ch ra request s dng bt ng b hay khng Method : l kiu ca POST, GET. URL : v tr ca file trn server. Async : ng b hay khng ng b Send(string) Send request n server String: ch s dng cho POST request. Vd: a. GET. xmlhttp.open("GET","demo_get.asp",true) ; xmlhttp.send(); nu bn mun send data cho server. xmlhttp.open("GET","demo_get2.asp? fname=Henry&lname=Ford",true); xmlhttp.send(); b. POST xmlhttp.open("POST","demo_post.asp",true); xmlhttp.send(); nu bn mun send data cho server. xmlhttp.open("POST","ajax_test.asp",true); xmlhttp.send("fname=Henry&lname=Ford"); 6.5 Update Page With the Response From the Server - ly ni dung tr li t server, bn s dng thuc tnh responseText hoc responseXml ca XMLHttpRequest.
Trang 92 Property Description responseText Ly d liu tr li t server nh l chui responseXML Ly d liu tr li t server nh l XML Vd: a. Nu d liu tr li t server khng phi l XML th bn s dng thuc tnh responseText. document.getElementById('test').innerHTML=xmlhttp.responseText ; b. Nu d liu tr li l XML thi bn dng thuc tnh responseXML v bn mun parse n ra bn c th lm nh sau. xmlDoc=xmlhttp.responseXML; var txt=""; x=xmlDoc.getElementsByTagName("ARTIST"); for (i=0;i<x.length;i++) { txt=txt + x[i].childNodes[0].nodeValue + "<br />"; } document.getElementById("myDiv").innerHTML=txt; 6.6 The onreadystatechange Event: a. The onreadystatechange Event: Khi request c send n server bn mun thc hin mt vai hnh thao tc vi response. + Onreadystatechange l s kin c bt khi readyState thay i + ReadyState cha thuc tnh ca XMLHttpRequest. Property Description Onreadystatechange Lu tr hm, hm ny s c gi t ng khi trng thi ca readyState thay i.
Trang 93 ReadyState Cha ng trng thi ca XMLHttpRequest 0: request not initialized 1: server connection established 2: request received 3: processing request 4: request finished and response is ready Status 200: Ok 400: Page not found b. AJAX - Creating a Callback Function - To ra mt hm callback s kim tra nu kt qu tra li sng sng s l. function loadXMLDoc(url) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); // set the callback function xmlhttp.onreadystatechange=stateChange; xmlhttp.open("GET",url,true); xmlhttp.send(null); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); // set the callback function xmlhttp.onreadystatechange=stateChange; xmlhttp.open("GET",url,true); xmlhttp.send(); } } - Hm callback c ng k thng qua thuoc tnh onreadystatechange ca XMLHttpRequest - Hm callback thi tng t nh sau. function stateChange() { if (xmlhttp.readyState == 4)
Trang 94 { if (xmlhttp.status == 200) { // process whatever has been sent back here
document.getElementById('test').innerHTML=xmlhttp.responseT ext; } else { alert("There was a problem in the returned data"); } } } vd: < html > < head > < script type="text/javascript" > var xmlhttp; function loadXMLDoc(url) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=stateChange; xmlhttp.open("GET",url,true); xmlhttp.send(null); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange=stateChange; xmlhttp.open("GET",url,true); xmlhttp.send(); } } func tion stat eCha nge( ) { if (xmlhttp.readyState==4) { if (xmlhttp.status==200) {
Trang 95 // process whatever has been sent back here
document.getElementById('test').innerHTML=xmlhttp.responseT ext; } else { alert("There was a problem in the returned data"); } } } < /script > < /head > < body > < div id="test" > < h2>Let AJAX change this text</h 2> < /div > <button type="button" onclick="loadXMLDoc('test1.txt')">Click Me</button> <button type="button" onclick="loadXMLDoc('test2.txt')">Click Me</button> < /body > < /html > * AJAX AND CLIENT SCRIPT a. V sao bn nn s d ng javascript tool kit - C bn, javascript v ajax l cng vic kh, gim bt s kh khn cho cng vic bn c th s dng toolkit ca mt hng th 3 nh l jQuery, Prototype, MooTools, hoac Rico ni n cung cp mt lp tri tng lm mt vi nhim v ph bin - Vd cp nht mt phn ca trang m khng cn phi load ton b trang - Trong s cc javasscript toolkit th Jquery c nh gi l tt nht v th Miscrosoft s tch hp n vo visual studio trong cc phin bn sau - Mt vi nh pht trin cha bt kp vi su hng ny, v vn cn trnh s dng javascript toolkit hoc javascript, trong nhiu trng hp, javascript th kh tch hp vo trong cc ng dng webforms truyn thng vi hu ht cc th vin javascript ca hang th 3. - Trong asp.net mvc nhng thch thc n gin khng cn tn ti, v th bn c th s dng bt ki th vin javascript no.
Trang 96
b. ASP.NET MVCs Ajax Helpers * Mvc cung cp mt t HTML helper bn c th d dng thc hin vic cp nht mt phn trang vi s c ch bt ng b a. Ajax.ActionLink() s to ra tag link, tng t nh tc Html.ActionLink(). Khi bn click vo link kt th n s fetches v chn n dung mi vo trang html tn ti b. Ajax.BeginForm() s to ra HTML form, tng t nh Html.BeginForm(). Khi bn submited th n s fetches and chn ni dung m vo trang html tn ti c. Ajax.RouteLink() tng t nh Ajax.ActionLink() d. Ajax.BeginRouteForm() tng t nh Ajax.BeginForm() * Fetching Page Content Asynchronously Using Ajax.ActionLink Trc khi bn c th s dng nhng helper bn phi tham chiu n 2 file javascript - Ch ra ajax.* helper - Th vin ASP.NET AJAX Mt nh 2 file cha trong folder /script ca bt c mt project ASP.NET MVC Nhng bn cn cn add tag <script> vo phn head ca trang view hoc master page Vd: < html > < head runat="server" > S l a chn ca bn c th hin .
Trang 97 <script src="<%= Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script> <script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.js") %>" type="text/javascript"></script> < /head > < /html > Vd < h2>What time is it?</h 2> < p > Show me the time in: < %= Ajax.ActionLink("UTC", "GetTime", new { zone = "utc" }, new AjaxOptions { UpdateTargetId = "myResults" }) %> < %= Ajax.ActionLink("BST", "GetTime", new { zone = "bst" }, new AjaxOptions { UpdateTargetId = "myResults" }) %> < %= Ajax.ActionLink("MDT", "GetTime", new { zone = "mdt" }, new AjaxOptions { UpdateTargetId = "myResults" }) %> < /p > <div id="myResults" style="border: 2px dotted red; padding: .5 em;" > Results will appear here < /div > < p > This page was generated at <%= DateTime.UtcNow.ToString("h:MM:ss tt") %> (UTC) < /p > -Vi mi link s request d liu t action method gi l Getime ( trong cung mt controller), v truyn i s l zone, link ny s ly d liu response t server v thay th ni dung ca th div c id l myResults. -Nu bn click vo link, s khng c s kin gi xy ra, trnh duyt s request bt ng b nhng khng c action method gi l GetTime, v th server s tr li li
Trang 98 404(thng ip s khng c hin th ). cho n lm vic bn phai to ra mt action method tn l GetTime() nh su. public string GetTime(string zone) { DateTime time = DateTime.UtcNow.AddHours(offsets[zone]); return string.Format("<div>The time in {0} is {1:h:MM:ss tt}</div>", zone.ToUpper(), time); } private Dictionary<string, int> offsets = new Dictionary<string, int> { { "utc", 0 }, { "bst", 1 }, { "mdt", -6 } } ; - Ch khng c gi c bit cho action method. N khng cn bit l service bt ng b n nh l mt phng thc bnh thng.
Trang 99
Trang 100
c. Passing Options to Ajax.ActionLink -Ajax.ActionLink() c mt vi overload, hu ht chng thi tng ng vi mt vi html.ActionLink
Trang 101 - Cc thuc tnh ca Ajax.ActionLink () Thuoc tinh Kieu du lieu Mo t Confirm string Nu ch ra, trnh duyt se yu cu user xc nhn, request bt ng b ch c thc hin khi user nhn ok httpmethod string Ch ra method ca resquest bt ng b, n th khng gii hn cho Get v Post, bn cng c th s dng nhng phng thc khc ca http vd Put hoc Delete InsertionMode insertionMode(enum) Liu c thay th ni dung ca phn t ch(thay th defualt) hay l b sng ni dung mi ti vi tr pha trn phn t (insertBefore) hoc pha i(insertAfter) LoadingElementid String Nu ch ra id ca phn t html s c hin th OnBegin String Tn ca hm javascript s c gi trc khi request bt ng b bt u, bn c th hy request bt ng b bi cch tr li false OnComplete string tn c hm javascript se duoc goi khi request bt ng b c hon thnh, bt chp n co thnh cng hay khng OnSucess String Tn hm javascrip s c gi khi request bt ng b c hon thnh vi s kin l thnh cng xy ra sau s kin OnComplete OnFailure String Tn ca hm javascript s c gi khi request bt ng b hon thnh vi s kin l fail, c gi sau s kin OnComplete UpdateTargelid String Ch ra id ca the html, ni ni dung t server se c ghi vo url String d. Running JavaScript Functions Before or After Asynchronous Requests
Trang 102 - Bn c th s dng OnBegin, OnComplete, OnSuccess v OnFailure to s l request bt ng b. Th t l OnBegin ->OnComplete->OnSuccess hoc OnFailure. Bn c th hy b chui ny bng cch tr li false t OnBegin hoc OnComplete. -Khi bt k mt ca bn hm c gi, chng s nhn mt i s m t mi th vi s kin . - Vd: hin th li khi request b li, bn c th lm nh sau < script type="text/javascript" > function handleError(ajaxContext) { var response = ajaxContext.get_response(); var statusCode = response.get_statusCode(); alert("Sorry, the request failed with status code " + statusCode); } < /script > < %= Ajax.ActionLink("Click me", "MyAction", new AjaxOptions { UpdateTargetId = "myElement", OnFailure = "handleError"}) %> i s ajaxContext c cc method get_date(), get_insertionMode(), get_loadingElement(), get_Request(), get_Response(), get_updateTarget(). Nhng phng thc bn s dng nhn nhng thng tin ca ng cnh hin ti Tn hm M t Kiu tr li get_data() Ly ton b html tr li t server( nu request thnh cng) String get_insertionMode() La chn insert default, top,sau. 0 ,1, 2 get_loadingElement() thnh phn html tng ng loadingElementid Dom element get_request Xut ra request asp.net ajax get_response() Ly response ca server get_updateTarget() Th html tng ng cp nht ni dung Dom element e. Detecting Asynchronous Requests
Trang 103 -Bn c th ly ni dung html t bt ki mothed, v bn ko cn bit hoc lo lng n l dch v request bt ng b hay khng -D dang xc nh request bt ng b, v mi ln MicrosoftMvcAjax.js to ra mt request bt ng b n cng thm mt i s t bit c gi l X-Requested-With vi gi tri l XMLHttpRequest. -Cch n gin xc nh n bng cch gi phng thc IsAjaxRequest() trong HttpRequestBase. - Vd public ActionResult GetTime(string zone) { DateTime time = DateTime.UtcNow.AddHours(offsets[zone]); if(Request.IsAjaxRequest()) { // Produce a fragment of HTML string fragment = string.Format("<div>The time in {0} is {1:h:MM:ss tt}</div>", zone.ToUpper(), time); return Content(fragment); } else { // Produce a complete HTML page return View(time); } } f. Submitting Forms Asynchronously Using Ajax.BeginForm -i khi bn mun bao gm d liu ngi dng nhp vo trong request bt ng b, cho trng hp ny bn c th s dng Ajax.BeginForm(). N tng t nh Html.BeginForm(), b sng thm AjaxOptions nh bn 12.1 - Vd: bn c th cp nht v d trc vi view template nh sau < h2>What time is it?</h 2> < % using(Ajax.BeginForm("GetTime", new AjaxOptions { UpdateTargetId = "myResults" })) { %> < p > Show me the time in: < select name="zone" > < option value="utc">UTC</option >
Trang 104 < option value="bst">BST</option > < option value="mdt">MDT</option > < /select > < input type="submit" value="Go" / > < /p > < % } % > < div id="myResults" style="border: 2px dotted red; padding: . 5 em;" > Results will appear here < /div > < p > This page was generated at <%= DateTime.UtcNow.ToString("h:MM:ss tt") %> (UTC) < /p > - Vi khng c thay i action method GetTime () Bn c kt qu nh sau
g. Invoking JavaScript Commands from an Action Method
Trang 105 -Nh bn c bit mvc gm c kiu tr v ca action method l javaScriptResult. N cho php bn tr li mt cu lnh javascrip t action method. -Asp.net mvc c xy dng ajax.* helper cho bn lm iu ny v chng s thc thi cu lnh javascript ca bn thy v chn ni dung vo DOM. Ci ny th hu dng khi bn thc hin mt vai hnh ng server v mun cp nht DOM ca pha client cho ph hp d liu server. Vd: < h2>List of items</h 2> < div id="message"></div > < ul > < % foreach (var item in Model) { % > < li id="item_<%= item.ItemID %>" > < b><%= item.Name %></b > <%= Ajax.ActionLink("delete", "DeleteItem", new {item.ItemID}, null) %> < /li > < % } % > </ul><i>Page generated at <%= DateTime.Now.ToLongTimeString() %></i>
- Khi user click vo link delete, n s to ra mt request bt ng b n server v gi action method DeleteItem, v truyn itemId cho n. Action method n s yu cu model layer xa item m request cung cp v su bn mun client cp nhat li DOM. Bn vit code cho DeleteItem nh sau:
Trang 106 [AcceptVerbs(HttpVerbs.Post)] // Only allow POSTs (this action causes changes) public JavaScriptResult DeleteItem(int itemID) { var itemToDelete = GetItem(itemID); // TODO: Actually instruct the model layer to delete "itemToDelete" // Now tell the browser to update its DOM to match var script = string.Format("OnItemDeleted({0}, {1})", itemToDelete.ItemID, JavaScriptEncode(itemToDelete.Name)); return JavaScript(script); } private static string JavaScriptEncode(string str) { // Encode certain characters, or the JavaScript expression could be invalid return new JavaScriptSerializer().Serialize(str); } client bn to ra hang OnItemDeleted nh sau < script type="text/javascript" > function OnItemDeleted(id, name) { document.getElementById("message").innerHTML = name + " was deleted"; var deletedNode = document.getElementById("item_" + id); deletedNode.parentNode.removeChild(deletedNode); } < /script >
Trang 107
7. S dng jQuery trong ASP.NET MVC 7.1 Referencing jQuery Vi mi project ASP.NET MVC iu c include th vin jquery trong folder /Script. Ging nh nhiu th vin javascript khc, n nh l mt file .js. s dng n, bn cn tham chiu n n. Vd: bn chn don code ny vo trang master page hoac view don the head < head runat="server" > < script src="<%= Url.Content("~/Scripts/jquery-1.3.2.min.js") %>" type="text/javascript"></script> <!-- Leave rest as before --> < /head > 7.2 Basic jQuery Theory Hm quan trng ca jquery l Jquery(). Bn c th s dng n query tt c cc thnh phan DOM trong trang HTML kt vi vi css. Vd: jQuery(DIV.MyClass) n s tm tt c th div trong trang ca bn c s dng class css l MyClass. jQuery() s tr li object ca javascript. Hu ht jQuery API gm mt tp hp ca nhng thng thc wrapped. Vd Jquery(DIV.MyClass).hide() lm cho tt c cc th dia kt hp vi class css l MyClass bin mt. Cho tin l jQuery cung cp mt cu trc ngn gn l $(), n th chnh tng t nh jQuery(). Vd: $(P SPAN).addClass(SuperBig) cng class css SuperBig vo tt c tt c cc th < span> c cha trong th <p >
Trang 108 $(.SuperBig).removeClass(SuperBig) removes class css c tn l SuperBig t cc tag c class css l SuperBig $(#options).toggle(). Bt tt hin th phn t vi id ca tag l option. Nu tag ang hin th th n se n tag i v ngc li n se hin tag ln. $(DIV:has(INPUT[type=checkbox]:disabled)).prepend(<i>Hey!</i>) chn tag < i>Hey!</i> vo au ca tat c cc the div cha checkbox c disable $(#options A).css(color,red).fadeOut() tm tt c cc th lin kt <a> c id l option, thay th color ca text thnh mu v thay i opactiy v 0. Nh bn thy n tht s l ngn gn. Nu khng s dng jQuery thi bn phi vit rt nhiu code ca javascript. jQuery cng h tr css 3 cho selector bt chp l trnh duyt c h tr hay khng. 7.3 Waiting for the DOM -Hu ht cc trnh duyt s run code javascript hay khi phn tch c php ca trang, trc khi load trang c hon thnh. N c nhng kh khn, bi v nu bn t code javascript vo u ca trang bn trong tag <head>, khi code ca bn s ko ngay lp tc thao tc n nhng tc html cui trang, vi vy n s khng nh mun ca bn -Truyn thng, nhng nh pht trin s gii quyt vn ny bng cch khi to code ca bn da vo s kin onload ca tag <body>. Nh vy code ca ban ch s run khi trang c load hon ton. Nhng n cng c nhng hn ch. Th <body> ch c duy nht mt thuc tnh onload, v th bn khng th kt hp nhiu code c lp vi nhau. Onload handler phi ch cho tt c cc DOM c load, gm c media(image). Nh vy n s lm cho chm trang ca bn -Gii quyt vn ny tt hn l ni cho trnh duyt bit l run code ca bn sm nht khi m DOM sng sng v khng c ch cho media. lm iu bn lm nh su. < script > $(function() { // Insert your initialization code here }) ; < /script >
Trang 109 - Bn truyn hm javasript cho hm $(). Bn ng k n thc hin sm nht khi m DOM sng sng. Bn c th ng k nhiu hm bn thch, tuy nhin thng th c mt hm $(function(){.}); ny ti v tr top ca view hoac control template, v bn t tt c nhng tc ng jQuery ca bn vo . 7.4. Event Handling - Jquery gii quyt vn v cc api khac nhu ca cc trnh duyt. Jquery cung cp mt mt lp tri tng cc hm javascript API c th lm vic nh nhu trn bt k trnh duyt no Vd: $("img").click(function() { $(this).fadeOut() }) Khi bn click vo image thi hm fadeOut() se c gi 7.5. Global Helpers - jQuery cung cp mt vi thuc tnh v hm ton cc n gin ha Ajax v lm vic vi nhiu trnh duyt v nhng mode khac. - Vd: mt vi helpers khc l method Description $.browser Cho bn bit trnh duyt gi th ang c s dng. Bn s tm thy mt ca nhng ci sau s nhn c kt qu l true: $.browser.msie, $.browser.mozilla, $.browser.safari, $.browser.opera. $.browser.version Cho bn bit version ca trnh duyt dang s dng $.support Xc nh liu trnh duyt c h tr mt vi thuc tnh khc hay khng $.strim(str) Tr li chui str vi xa i khon trng au v cui $inArray(val,arr) Tr li v tr u tin ca val trong mang arr. jQuery cung cp hm ny bi v internet Explorer version 7 khng cung cp hm array.indexOf()
Trang 110 110 - y khng phi l tp hp y ca nhng hm v thuc tnh helper m jQuery cung cp, nhng tp hp y tht s th kh nh. 7.5. Adding Client-Side Interactivity to an MVC View - Gi s bn c class MountainInfo c nh ngha nh sau public class MountainInfo { public string Name { get; set; } public int HeightInMeters { get; set; } } - Bn s to ra mt tp hp i tng Mountaininfo nh sau. < h2>The Seven Summits</h 2> < div id="summits" > < table > < thead><tr > < td>Item</td> <td>Height (m)</td> <td>Actions</td > < /tr></thead > < % foreach(var mountain in Model) { % > < tr > < td><%= mountain.Name %></td > < td><%= mountain.HeightInMeters %></td > < td > < % using(Html.BeginForm("DeleteItem", "Home")) { % > < %= Html.Hidden("item", mountain.Name) % > < input type="submit" value="Delete" / > < % } % > < /td > < /tr >
Trang 111 111 < % } % > < /table > < /div > -N th khng tuyt vi nhng n vn thc thi tt, khng c javascript no c gi. v
- DeleteItem() action method se hin th v thc thi nh sau:
- thc hin nt Delete n thng s dng nhiu forms vi mi nut Delete th c kt hp vi <form>, v th n c th to ra HTTP POST vi khng c javascript cho nhng URL vi item c delete.
Trang 112 112 By gi chng ta s nng cp n trong 3 cch. 7.6. Improvement 1: Zebra-Striping -y l quy c ph bin ca thit k web, cc hng lun phin nhu thi c mu khc nhau. - lm iu trong bn inh ngha mt class css v su bn la chn b sung class vo nhu sau < % int i = 0; % > < % foreach(var mountain in Model) { % > < tr <%= i++ % 2 == 1 ? "class='alternate' " % >> - V bn chn on code vo <head> cua trang < script type="text/javascript" > $(function() { $("#summits tr:nth-child(even)").css("background-color", "silver"); }); < /script >
7.7 Improvement 2: Confirm Before Deletion -Trc khi bn thc hin hnh ng m khng th phuc hi li th tt nht bn nn cung cp cho ngi dng mt cnh bo trc khi bn thc hin hnh ng. Nh l bn cn cnh bo trc khi thc hin xa item. Bn khng cn phi add s kin Onclient() or Onsubmit vo th hmt m bn s dung jquery nhu sau
Trang 113 113 - Bn add khi code ny vo tag <head> ca trang $("#summits form[action$='/DeleteItem']").submit(function() { var itemText = $("input[name='item']", this).val(); return confirm("Are you sure you want to delete '" + itemText + "'?"); });
7. 8 Improvement 3: Hiding and Showing Sections of the Page -Mt ci b quyt ph bin khc l n mt on nht nh no ca trang cho ti khi bn bit cht chn n c lin quan ti ngi s dng. -Vd: bn mun ct certain trong grid thi n hoc hin tng ng cho check box. N s vt v cho mt kin trc bnh thng nu bn lm iu trn server( asp.net Webform), nu bn lm iu client bn s phi ch n trnh duyt ang chy. -Nhng bn c th b qua vn . jQuery to n kh l n gin. bn b sung code vao phn <head> ca trang. $("<label><input id='heights' type='checkbox' checked='true'/>Show heights</label>") .insertBefore("#summits") .children("input").click(function() { $("#summits td:nth-child(2)").toggle(); }) .click();
Trang 114 114
7.9 Client/Server Data Transfer with JSON -Thng thng bn khng ch cn truyn d liu n v cho client. Bn c co truyn i tng, mng nhng i tng, hoc l i tng graph. JSON l mt nh dng ph hp cho vic ny. -ASP.NET MVC c h tr cho vic truyn d liu JSON v jQuery c h tr cho vic nhn JSON. - Action method tr li JSON. public class StockData { public decimal OpeningPrice { get; set; } public decimal ClosingPrice { get; set; } public string Rating { get; set; } } public class StocksController : Controller { public JsonResult GetQuote(string symbol) { // You could fetch some real data here if(symbol == "GOOG") return new JsonResult { Data = new StockData {
Trang 115 115 OpeningPrice = 556.94M, ClosingPrice = 558.20M, Rating = "A+" }} ; else return null; } } - client bn c th ly c chui JSON s dng $.get() or $.post, v sau phn tch n thnh i tng javascript bi gi hm eval(). Tuy nhin c cch d dng hn jQuery c h tr cho vic ly v phn tich JSON vi hm $getJSON(). < h2>Stocks</h 2> < % using(Html.BeginForm("GetQuote", "Stocks")) { %> Symbol : < %= Html.TextBox("symbol") % > < input type="submit" / > < % } % > < table > < tr><td>Opening price:</td><td id="openingPrice"></td></tr > < tr><td>Closing price:</td><td id="closingPrice"></td></tr > < tr><td>Rating:</td><td id="stockRating"></td></tr > < /table > <p><i>This page generated at <%= DateTime.Now.ToLongTimeString() %></i></p> - Sau bn hijaxing code hin th thuc tnh ca StockDate vo table $("form[action$='GetQuote']").submit(function() {
7.10 Fetching XML Data Using jQuery -Nu thch hn bn c th s dng nh dng xml thay cho nh dng JSON cho v d trn. Khi m bn nhn d liu xml, n th d hn cho vic dung jQuery $.ajax() thay cho $.get(). B v $.ajax() cho php bn s dung datatype:xml la chon ny ni cho bit phan tnh cu trc nh l xml. - u tin bn cn tr li XML t action method. - Vd: bn thay i action method cho cho vd trc nh sau public ContentResult GetQuote(string symbol) { // Return some XML data as a string }) ;
Trang 117 117 if (symbol == "GOOG") { return Content( new XDocument(new XElement("Quote", new XElement("OpeningPrice", 556.94M), new XElement("ClosingPrice", 558.20M), new XElement("Rating", "A+") )).ToString(), System.Net.Mime.MediaTypeNames.Text.Xml); } else return null; } -Action method s tr li XML nh sau < Quote > < OpeningPrice>556.94</OpeningPrice > < ClosingPrice>558.20</ClosingPrice > < Rating>A+</Rating > < /Quote > - Tip theo bn ni cho jQuery s thng dch n nh l XML thay vi cho JSON. $("form[action$='GetQuote']").submit(function() { $.ajax({ url: $(this).attr("action"), type: "GET", data: $(this).serialize(), dataType: "xml", // Instruction to parse response as XMLDocument success: function(resultXml) { // Extract data from XMLDocument using jQuery selectors var opening = $("OpeningPrice", resultXml).text(); var closing =
Trang 118 118 $("ClosingPrice", resultXml).text(); var rating = $("Rating", resultXml).text(); // Use that data to update DOM $("#openingPrice").html(opening); $("#closingPrice").html(closing); $("#stockRating").html(rating); } }) ; return false; }) ; 8. Kt hp gia MVC v WebForms (s dng cc k thut webform vo trong ng dng MVC nh vic s dng cc control ch ph hp vi webform,): pht trin webform ln m hnh MVC, chng ta cn thc hin cc bc nh sau: nh x n 3 th vin chun trong m hnh MVC gm: System.Web.Mvc, System.Web.Routing, v System.Web.Abstraction vo trong th mc \bin. Trong , System.Web.Mvc nm trong th mc C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies, 2 files cn li nm trong th mc C:\Program Files\Reference Assemblies\Microsoft\Framework\v3. Sau , ta ch cn nh x n n bng cch:
B sung thm hai th mc l Controllers v Views
Trang 119 119 cp nht t webform ln m hnh MVC chng ta b sung thm mt s file(s) cn thit nh sau:
Cp nht file Web.config np 3 th vin ng ti thi im chy bng vic ng k UrlRoutingModule Bc 1: Thay i ni dung th Compilation nh hnh bn di, bc ny m bo cc assembly c yu cu s c tham chiu n trong qu trnh bin dch (make sure that
truy xut n cc System.Web.Mvc helpers, System.Linq, v System.Collections.Generic each required assembly is referenced for compiltion). Bc 2: Thm tham chiu namespace n section system.web/pages, iu ny cho php
Trang 120
dng so khp URL t request n nhng Route thch hp chng hn nh
sau: t ViewPage. Cui cng, chng ta cn ng k UrlRoutingModule HttpModule. Module ny c tc Controller/Action. Sau khi thit lp xong cc thuc tnh, chy th ng dng web, ta thu c kt qu nh
Trang 121
* Kt hp Webform v MVC Bc 1: to mt trang .aspx c ni dung nh bn di