tìm hiểu asp.net mvc2

43
Li Cm Ơn! Như vy l bn năm hc ti trưng đ gn kt thc.Đn lc ny em ngh mnh tht may mn khi đưc hc ti trưng Đi Hc Khoa Hc Hu,đây l mt môi trưng tt đ hc tp v rn luyn,c s vt cht đy đ,đc bit thy cô trong trưng,khoa đu rt nhit tnh. Đc bit em xin chn thnh cm ơn cc thy cô trong Khoa Công Ngh Thông Tin,trong sut nhng năm hc ti trưng thy cô đ tn tnh chăm lo,dn dt chng em trong hc tp cng như trong cuc sng. Bo co thc tp l kt qu ca qu trnh hc tp bn năm ti trưng,l kt qu ca mt thng lm vic hăng say,em xin cm ơn s gip đ nhit tnh ca thy Nguyn Hong H đ gip em hon thnh bo co ca mnh. Mt ln na em xin chân thnh cm ơn qu thy cô,bn b đ ch bo,gip đ v hc tp cng như trong cuc sng.Em luôn nh nhng điu đ như mt k nim kh quên trong đi sinh viên ca mnh. Đng Như Hiu. Hu,thng 2 năm 2012. 1

Upload: hieu-dien-nao

Post on 14-Dec-2014

2.966 views

Category:

Education


4 download

DESCRIPTION

Sơ lược mvc2

TRANSCRIPT

Page 1: Tìm Hiểu Asp.Net MVC2

Lơi Cam Ơn!Như vây la bôn năm hoc tai trương đa gân kêt thuc.Đên luc nay em nghi minh thât

may măn khi đươc hoc tai trương Đai Hoc Khoa Hoc Huê,đây la môt môi trương tôt đê hoc tâp va ren luyên,cơ sơ vât chât đây đu,đăc biêt thây cô trong trương,khoa đêu rât nhiêt tinh.

Đăc biêt em xin chân thanh cam ơn cac thây cô trong Khoa Công Nghê Thông Tin,trong suôt nhưng năm hoc tai trương thây cô đa tân tinh chăm lo,dân dăt chung em trong hoc tâp cung như trong cuôc sông.

Bao cao thưc tâp la kêt qua cua qua trinh hoc tâp bôn năm tai trương,la kêt qua cua môt thang lam viêc hăng say,em xin cam ơn sư giup đơ nhiêt tinh cua thây Nguyên Hoang Ha đa giup em hoan thanh bao cao cua minh.

Môt lân nưa em xin chân thanh cam ơn quy thây cô,ban be đa chi bao,giup đơ vê hoc tâp cung như trong cuôc sông.Em luôn nhơ nhưng điêu đo như môt ky niêm kho quên trong đơi sinh viên cua minh.

Đăng Như Hiêu.Huê,thang 2 năm 2012.

1

Page 2: Tìm Hiểu Asp.Net MVC2

Muc LucDanh Muc Cac Tư Tiêng Anh………………………………………………………….2Danh Muc Cac Bang…………………………………………………………………...2Danh Muc Cac Hinh……………………………………………………………………2Mơ Đâu…………………………………………………………………………………2Phân I.Tông Quan Vê Mô Hinh MVC Trong .Net

1.1.Lich sư phat triên………………………………………………………………21.2.Đăc điêm cua Asp.net MVC…………………………………………………21.3.Kiên truc cua Asp.net MVC. …………………………………………………21.4.So sanh Asp.net Webform vơi Asp.net MVC. ………………………………2

Phân II. Cac Thanh Phân Cơ Ban Trong Asp.net MVC2.1.Cac khai niêm ban đâu…………………………………………………………22.2.Url va Routing………………………………………………………………..22.3.Controller va Action Method…………………………………………………..22.4.Views………………………………………………………………………….22.5.Models…………………………………………………………………………2

Phân III.Xây dưng ưng dung SportStore

2

Page 3: Tìm Hiểu Asp.Net MVC2

Danh Muc Cac Tư Tiêng Anh

3

Page 4: Tìm Hiểu Asp.Net MVC2

Danh Muc Cac Bang

4

Page 5: Tìm Hiểu Asp.Net MVC2

Danh Muc Hinh Anh

5

Page 6: Tìm Hiểu Asp.Net MVC2

Mơ Đâu Ly do chon đê tai:

Hiên nay viêc thiêt kê trang web Asp.net la rât dê dang đôi vơi lâp trinh viên,chung ta co thê tim tai liêu trên mang,tham khao cac project đê nghiên cưu va phat triên.Microsdoft muôn tao ra công cu đê ngươi sư dung dê dang lam viêc va xây dưng trang web nhanh chong nhât.Asp.net WebForm đươc thiêt kê đê thưc hiên nhưng điêu đo.

Asp.net WebForm đươc thiêt kê đê ngươi dung cam thây như minh đang thiêt kê môt chương trinh WinForm vây, băng cach keo tha cac button, textboxt.., tư sinh ma Html, đơn gian, dê hiêu.. Chinh vi thê Asp.net WebForm du đa ra đơi cach đây hơn mươi năm nhưng vân đươc sư dung cho đên nay.

Chinh vi vây Asp.net WebForm đôi khi lai chinh la nhươc điêm cua chinh no, viêc dung cac web control sinh cac event đê thưc hiên hanh đông cho UI khi co sư tương tac vơi ngươi dung hâu hêt thưc hiên châm va gây ra cac han chê va không thoai mai, viêc sư dung ViewState đê quan ly, cac trang web đêu co lifecycle,postback..

Asp.net MVC chinh la môt sư lưa chon thay thê cho Asp.net WebForm đươc xây dưng vơi 3 phân chinh:Models(liên quan đên dư liêu), Views(giao diên), Controllers(điêu khiên), viêc chia trang web ra nhiêu thanh phân giup cho viêc xây dưng trang web môt cach ro rang,chăt che. Vơi câu truc 3 lơp viêc nâng câp, sưa đôi hoăc thay thê môt chưc năng se dê dang hơn.

Vơi nhưng ưu điêm trên Asp.net MVC chăc chăn se la nên tang đê xây dưng va phat triên web ly tương. Tuy nhiên vi đây la công nghê mơi, nên tai Viêt Nam hâu như chưa đươc ap dung va nêu co thi cung không nhiêu, va hâu hêt cac ban sinh viên đêu chưa biêt đên no. Chinh vi thê ma em đa manh dan chon đê tai nghiên cưu vê MVC đê lam bao cao thưc tâp cua minh.

Muc đich nghiên cưu:Nghiên cưu MVC vơi nhưng muc đich: Hoc hoi kiên thưc mơi. Qua trinh tim hiêu giup em nâng cao kha năng tư hoc cua minh. Phuc vu viêc xây dưng môt ưng dung MVC trong thưc tê. Đôi tương va pham vi nghiên cưu: Asp.net MVC 2.0 Xây dưng ưng dung ban hang trưc tuyên. Phương phap nghiên cưu: Nghiên cưu ly thuyêt thông qua ebook Thông qua cac vi du, video trên mang. Tông hơp kiên thưc đê xây dưng ưng dung thưc tê. Y nghia khoa hoc va thưc tiên: Hiên nay Asp.net MVC la công nghê mơi tai Viêt Nam va cac ban sinh viên vân

chưa biêt đên nhiêu, chinh vi thê hoan thanh bao cac thưc tâp nay se la môt tai liêu nho giup cac ban sinh viên ban đâu muôn tim hiêu vê công nghê mơi nay.

Asp.net MVC co nhiêu ưu điêm vươt trôi, no se la tương lai thay thê cho Asp.net WebForm, cho nên viêc tim hiêu vê no se co tinh tich cưc va thưc tiên cao, co thê ap dung cho bây giơ hoăc tương lai.

6

Page 7: Tìm Hiểu Asp.Net MVC2

Phân ITông Quan Vê Mô Hinh MVC Trong .Net

1.1.Lich Sư Phat Triên:Vao nhưng năm 70 cua thê ky 20, tai phong thi nghiêm Xerox PARC ơ Palo Alto. Sư

ra đơi cua giao diên đô hoa (Graphical User Interface) va lâp trinh hương đôi tương (Object Orented Programming) cho phep lâp trinh viên lam viêc vơi giao diên đô hoa co thuôc tinh va phương thưc cua no. Không dưng lai ơ đo cac nha nghiên cưu cua Xerox PARC đa cho ra đơi kiên truc goi la MVC viêt tăt cua Model-View-Controller.

MVC đươc phat minh tai Xerox PARC bơi TrygveReenskaug. MVC lân đâu tiên xuât hiên công khai la trong Smalltalk-80, sau đo sau môt thơi gian dai không co thông tin gi vê MVC, ngay ca trong tai liêu Smalltalk-80. Cac tai liêu đâu tiên quan trong đêu công bô la “A cool book for using the Model-View-Controller User Interface Paradigm in Smalltalk-80”, bơi Glenn Krasner va Stephen Pope, xuât ban thang 8 năm 1988.

Thơi ki Công nghê Sưc manh Điêm yêuJurassic Common Gateway

Interface (CGI)Đơn gian, linh hoatLưa chon duy nhât vao thơi điêm nay

Chay ngoai web server,nên cân nhiêu tai nguyên (cân cac tiên trinh riêng lẻ trên HĐH cho mỗi lơi yêu câu).Câp thâp

Bronze age Microsoft Internet Database Connector (IDC)

Chay trong web server

Chi la đong goi cho nhưng câu truy vân SQL va template cho cac kêt qua co đinh dang

1996 Active Server Pages (ASP)

Muc đich chung Thông dich thơi gian thưcXu hương “spaghetti code”

2002/03 ASP.NET 1.0/1.1 Đa đươc biên dichGiao diên co trang thaiCâu truc lơnXu hương lâp trinh hương đôi tương

Năng nê trên băng thôngHTML kho nhinKhông thê test

2005 ASP.NET 2.02007 ASP.NET Ajax2008 ASP.NET 3.52009 Asp.net MVC 1.02010 Asp.net MVC 2.0

ASP.NET 4.0

7

Page 8: Tìm Hiểu Asp.Net MVC2

2011 Asp.net MVC 3.01.2.Đăc Điêm Cua Asp.net MVC:

Tach ro rang cac môi liên quan, mơ kha năng test TDD(test driven developer). Co thê test unit trong ưng dung ma không cân chay Controller cung vơi tiên trinh Asp.net va co thê dung bât ki môt unit test framework nao như NUnit,MBUnit,MS Test..

Co kha năng mơ rông, moi thư trong MVC đươc thiêt kê cho phep dê dang thay đôi va tuy biên.(vi du:co thê lưa chon sư dung engine view riêng, routing policy,parameter serialization…).

Url manh me, trong sang, đuôi cac url không co phân mơ rông .aspx.Vi du:co thê anh xa đia chi /Product/Edit/4 đê thưc hiên hanh đông “Edit” cua lơp điêu khiên ProductController.

Asp.net MVC cung hô trơ cac file dang Asp.net như .aspx, .ascx, .Master va đanh dâu cac tâp tin nay như môt “view template” (co thê dê dang dung cac tinh năng cua Asp.net như lông Master Page, <%=<% snippets, mô ta server controls, template, data-binding, localization,…).

Tuy nhiên se không con postback va interactive back server va thay vao đo la interactive end-user tơi môt Controller class,se không co viewstate, page lifecycle.

Asp.net MVC hô trơ đây đu cac tinh năng bao mât cua Asp.net như form/windows authenticate, Url authorization, membership/roles,output va data caching, session/profile state, configuration system, provider architecture ….

1.3.Kiên Truc Cua Asp.net MVC:

Trong mô hinh MVC môt đôi tương đô hoa ngươi dung(GUI Component) gôm 3 phân cơ ban:Models,Views,Controllers.

Models: trong cac ưng dung dưa trên MVC đo la nhưng thanh phân co nhiêm vu lưu trư thông tin, trang thai cua cac đôi tương, thông thương no la môt lơp đươc anh xa tư môt bang trong CSDL. Lây vi du, chung ta co lơp Product đươc sư dung đê mô ta dư liêu tư bang Products trong SQL, bao gôm ProductID, OrderDate...

8

Page 9: Tìm Hiểu Asp.Net MVC2

Views:la thanh phân chiu trach nhiêm hiên thi lên cac thông tin cho ngươi dung thông qua giao diên. Thông thương, cac thông tin hiên thi đươc lây tư thanh phân Models. Vi du, đôi tương Product co môt "Edit" view bao gôm cac textboxes, cac dropdowns va checkboxes đê chinh sưa cac thuôc tinh cua san phẩm; co môt "Display" view gôm 2 dong, côt dong la ProductID, dong sau la OrderDate... đê xem thông tin vê san phẩm.

Controller:chiu trach nhiêm xư ly cac tac đông vê măt giao diên, cac thao tac đôi vơi Models, va cuôi cung la chon môt Views thich hơp đê hiên thi, trong kiên truc MVC View chi co trach nhiêm hiên thi giao diên ma thôi, con điêu khiên dong nhâp xuât vân la do Controller.

Môt lơi điêm cua MVC la no băt buôc phai tao ra sư ranh mach trong liên kêt giưa 3 thanh phân models,views,controllers trong ưng dung. Duy tri đươc môi quan hê ranh mach khiên viêc kiêm tra ưng dung dê dang hơn, đông thơi trach nhiêm cua cac thanh phân đươc đinh nghia ro rang va đêu ăn khơp vơi nhau.1.4. So S anh Asp.net Webform V ơi Asp.net MVC :

Asp.net Webfrom sư dung Viewstate đê quan ly cac trang web đêu co lifecycle,postback, dung cac web controls, cac evens đê thưc hiên cac hanh đông cho UI khi co sư tương tac vơi ngươi dung nên hâu hêt Asp.net xư ly châm.

Asp.net MVC Framework chia lam 3 phân: Models, Views, Controllers. Moi tương tac vơi Views se thưc hiên hanh đông trong Controller, không con postback,lifecycle va cac events.

Viêc kiêm tra test lỗi,debug vơi Asp.net đêu phai chay tât ca cac tiên trinh cua Asp.net va moi sư thay đôi ID cua control nao cung anh hương đên ưng dung.Đôi vơi Asp.net MVC Framework thi viêc co thê sư dung unit test đê thẩm đinh cac Controlers thưc hiên như thê nao.

Tinh năng Asp.net Webform Asp.net MVCKiên truc Webform-Business-

DatabaseModels-Views-Controllers

Cu phap chương trinh Tât ca cac sư kiên va control do server quan ly

Cac sư kiên do Controlers quan ly

Truy câp dư liêu Sư dung hâu hêt cac công nghê truy câp dư liêu trong ưng dung

Sư dung LinQ to Sql class đê tao mô hinh truy câp đôi tương

Debug Debug chương trinh phai thưc hiên tât ca bao gôm cac lơp truy câp dư liêu,hiên thi,điêu khiên cac control

Sư dung unit test đê kiêm tra cac phương thưc trong Controller

Tôc đô phân giai Châm vi trong trang co nhiêu control va Viewstate lơn

Nhanh va không cân phai quan ly cac Viewstate

Tương tac vơi Javascript Kho khăn do cac control đươc quan ly bơi server

Dê dang hơn do cac đôi tương không do server quan ly

Url address Câu truc url co dang: <filename>.aspx?&<tham sô>

Câu truc đia chi ranh mach theo dang Controller/Action/Id

9

Page 10: Tìm Hiểu Asp.Net MVC2

Phân IICac Thanh Phân Cơ Ban Trong Asp.net MVC

2.1.Cac Khai Niêm Ban Đâu:

Trong môt ưng dung xây dưng trên mô hinh MVC đêu đươc chia lam 3 phân Models, Views, Controllers.

Bât cư môt request nao đên sever se đươc xư ly ơ Controller,Controller se tiêp nhân request đo va xư ly, bên trong Controller se co nhiêu Actions, mỗi Action tương ưng xư ly môt request. Vi du chung ta co ProductController bên trong đo ViewAction đê tiêp nhân request đê xem xet thông tin cua 1 product, trongânkhi UpdateAction tiêp nhân request câp nhât san phẩm khi ngươi dung kich nut thay đôi thông tin san phẩm.

Tâng Models đai diên cho nhưng entity vơi bên trong hê thông cua, đôi vơi môt sô hê thông thi Business Logic co thê năm trong tâng Models hoăc năm trong Controller tuy theo thiêt kê.

Sau khi Controller lam viêc vơi tâng Models đê lây thông tin cân cho ngươi dung thi Controller se gưi cho Views môt DataModel va Views se render cai DataModel đo ra hiên thi cho ngươi dung.

10

Page 11: Tìm Hiểu Asp.Net MVC2

Asp.net MVC không phai la môt sư thay thê cho Asp.net WebForm ma chi la môt sư chon lưa mơi cho nhưng ngươi phat triên web, Asp.net MVC cung co nhưng khai niêm nhưng Asp.net WebForm như Configuration,Security,Roles…

Câu truc chinh 1 ưng dung trong dư an Asp.net MVC:

Content:thư muc chư file css,file anh. Controllers:chư cac Controller cua ưng dung, môt Controller băt buôc theo sau no

co “Controller”. Models:chưa cac lơp Business Logic. Views:chư nhưng trang aspx,tương ưng vơi môt Controller thi se co môt Views

tương ưng.2.2.Url Va Routing:

Hâu hêt cac Web Framework như Asp, Jsp, Php… đêu anh xa url vao 1 file lưu trên đia.MVC Framwork lam viêc theo cach khac, thay vi anh xa cac file trên đia no se đi trưc tiêp vao class nhưng lơp nay la cac Controllers.Url Thưc hiênhttp://mysite.com/default.aspx E:webroot\default.aspxhttp://mysite.com/admin/login.aspx E:webroot\admin\login.aspx

11

Page 12: Tìm Hiểu Asp.Net MVC2

Môt url như trên phu thuôc vao câu truc thư muc trong ưng dung, không thân thiên vơi ngươi dung, va không thân thiên vơi cac công cu search như Google. Url Thưc hiênhttp://mysite.com/photo Controller=”Gallery”, action=”Display”http://mysite.com/admin/login Controller=”Admin” action=”Login”

Routing system quan ly tât ca nhưng chuyên nay va co 2 nhiêm vu chinh : Câu nôi giưa url trên thanh đia chi cua trinh duyêt vơi Controller va Action

method tương ưng. Tao ra nhưng url dưa vao Controller va Action Method ma ngươi lâp trinh đưa

vao.Hê Thông Đinh Tuyên:

Co 5 thuôc tinh cua môt đôi tương Route:

Thuôc tinh Y nghia Kiêu Vi duUrl Url dung đê noi

vơi cac Parameters

string “Browse/Category/pageIndex”

RouteHandler Xư ly cac request IRouteHandler new MvcRouteHandler()Default Tao ra gia tri măc

đinh cho cac Parameters. No co thê la UrlParameter.OptionalNghia la nêu không cup câp môt gia tri nao trên url thi se không co gia tri nao cho cac Parameters

RouterVaulueDictionary new RouterVaulueDictionary (new{controller= "Products", action = "List", category = "Fish", pageIndex = 3 })

Constraints Thiêt đăt điêu kiên cho cac Parameters

RouterVaulueDictionary new RouteValueDictionary(new { pageIndex = @"\d{0,6}" })

DataTokens Thiêt đă tuy chon cho cac route nhâp vao va se đươc bô đinh tuyên xư ly

RouterVaulueDictionary

Thanh phân chinh:RouteBase, Route va RouteCollection:Hê thông đinh tuyên se chay khi co request Câu hinh đinh tuyên đươc xây dưng dưa trên 3 thanh phân chinh: RouteBase:La lơp cơ sơ trưu trương cua môt route,nêu không thich cach ma nhưng

đôi tương route tim ra nhưng url khơp vơi no hoăc muôn lam cho nhưng url co dang khac ban co thê viêt lai lơp va kê thưa tư RouteBase luc đo ta phai overide lai 2 phương thưc: GetRouteData va GetVirtualPath.

12

Page 13: Tìm Hiểu Asp.Net MVC2

Route:La lơp con sư dung tiêu chuẩn cua RouteBase,đinh nghia môt URL templating, defaults, constraints.

RouteCollection:la môt đinh tuyên câu hinh đây đu, bao gôm danh sach RouteBase.

RouteTable.Route la môt thê hiên tinh cua RouteCollection, thông thương no chi đươc goi môt lân khi ưng dung chay lân đâu tiên, trong phương thưc Application_Start() trong file Globla.asax.cs. No la môt đôi tương tinh, vi vây no tôn tai trong suôt qua trinh sông cua ưng dung, va không tai tao lai mỗi khi co môt request tơi. Trong ham Application_Start() lai goi phương thưc tinh RegisterRoute().

Qua Trinh Xư Ly Cua Routing Khi Co Môt Request:Khi co môt request đên, hê thông se goi mỗi IHttpModules đê đăng ki vơi ưng dung,

vơi .Net 3.5 ưng dung se tham chiêu tư Web.config. Vơi .Net 4.0 ưng dung se tham chiêu tư ASP.NET Web.config mơ rông va IIS 7.x applicationHost.config

Module nay thưc hiên 3 điêu:1. No tim đôi tương RouteBase đâu tiên trong RouteTable.Routes trung hơp

request.Route phu hơp khi đap ưng đươc 3 yêu tô sau:+ Url request phu hơp theo mâu cua môt Route.+ Tât ca cac thông sô co măt trong Url request hoăc trong gia tri măc đinh.+ Tât ca cac thông sô đêu thoa man Constraints.

UrlRoutingModule se băt đâu tim tư gia tri đâu tiên theo thư tư cac gia tri tiêp theo trong RouteTable.Route cho đên khi găp gia tri trung khơp,vi vây điêu quan trong nhât la ta phai săp xêp cac route theo đung thư tư thich hơp.

2. No se hoi đôi tương RouteBase đê cung câp môt câu truc RouteData, va đăc ta cach xư ly request như thê nao. RouteData la môt dư liêu đơn gian, câu truc gôm 4 thuôc tinh:+ Route : Tham chiêu đên tuyên đương đươc chon, no thuôc RouteBase.+ RouteHandler: la đôi tương hiên thưc cua IrouteHandler, cai ma se xư ly

request.Trong Asp.Net MVC no thương la môt thê hiên cua MvcRouteHandler.

+ Values: Tư điên chưa tên va gia tri đươc lây tư request công thêm gia tri măc đinh cua tham sô trong url.

+ DataTokens: la tư điên chưa câu hinh bô sung đươc cung câp bơi route đưa vao.

3. No goi RouteHandler cua RouteData, no cung câp cho RouteHandler thông tin vê yêu câu hiên tai thông qua môt tham sô goi la requestContext.Điêu nay bao gôm thông tin cua RouteData va môt đôi tương HttpContextBase đăc ta tât ca thông tin liên quan bao gôm Http header, cookies, authentication, query string,dư liêu cua form post.

RouteValueDictionary:Thuôc tinh măc đinh cua Route la môt RouteValueDictionary, đo la môt API linh hoat

vi vây ban co thê lam nhiêu cach khac nhau ma ban muôn. RouteValueDictionary se tư trich ra danh sach nhưng thuôc tinh (controller,action) vi vây ban cân cung câp danh sach tên va gia tri nhưng thuôc tinh nay.

Co môt cach phô biên đê tao RouteValueDictionary đo la cung câp môt IDictionary <string,object> như la môt tham sô khơi tao hoăc cach khac la dung collection initializer.Vi du:

13

Page 14: Tìm Hiểu Asp.Net MVC2

Tao Môt Tuyên Vơi MapRoute():Asp.Net MVC đa mơ rông phương thưc cho RouteCollection goi la MapRoute. No

cung câp môt cach khac đê thêm môt tuyên, thay vi goi route.Add(new Route(…)).Vi du:

Trong vi du trên PublicProductsList la tên cua tuyên,đo la chuôi duy nhât va co thê đăt tuy y, tên cua tuyên co thê đê null.Dung Parameter:

Route nay se nôi vơi nhưng Url như la: /Catalog/yellow hoăc /Catalog/1234, va hê thông đinh tuyên se thêm tên/gia tri tương ưng cho đôi tương request cua RouteData. Trong request /Catalog/yellow RouteData.Values[“color”] cho gia tri yellow.Nhân Gia tri Parameter tư Action Methods:

Môt action methods co thê lây ra cac parameter. Khi Asp.Net MVC muôn goi môt action methods cua ban no cân cung câp gia tri cho mỗi parameter trong methods. Môt trong nhưng nơi ma no lây gia tri la tư RouteData, no se tim gia tri trong tư điên cua RouteData, nhăm tim kiêm môt khoa va gia tri tương ưng vơi tên cua parameter.

Dung Default:Ban không cung câp gia tri cho {color}, no trơ thanh tham sô băt buôc.nhưng vơi

request /Catalog không phu hơp, luc nay chung ta co thê tao ra môt tuy chon băng cach thêm vao môt đôi tương Default:

Bây giơ nêu co môt request dang: /Catalog/ va Catalog/yellow.

14

Page 15: Tìm Hiểu Asp.Net MVC2

RouteData.Values[“color”] cua /Catalog/ se la gia tri null.RouteData.Values[“color”] cua /Catalog/yellow se la gia tri yellow.

Cai Đăt Parameter Không Nhân Gia Tri Default:Chung ta co thê dung gia tri măc đinh đăc biêt UrlParameter.Optional thay vi đưa ra

gia tri thưc cho tham sô.

Điêu nay muôn noi răng nêu request cung câp môt gia tri page thi chung ta se dung no, nhưng nêu request đên không cung câp gia tri page thi route se không cung câp gia tri page cho action methods.

Tai sao chung ta không sư dung gia tri 0 hoăc null, điêu nay co 2 ly do: Nêu action methods cua ban lây kiêu int cho gia tri page, thi đo không phai la

kiêu null, ban se cung câp môt gia tri la 0 hoăc gia tri nao đo kiêu int, nghia la action methods se luôn nhân môt gia tri cho page.

Nêu gia tri cho page la null, thi no se han chê đôi vơi parameter cua action methods khi ma dư liêu cua request đên la nhiêu gia tri query string.

Dung Constraints:Đôi khi chung ta phai thêm nhưng điêu kiên phai đap ưng cho route. Vi du: Môt sô route chi nôi vơi Get mothod hoăc ngươc lai. Môt vai parameter se phai tuân theo mâu. Môt sô url đươc yêu câu bơi nhưng trinh duyêt web thông thương, co nhưng url

đươc yêu câu tư trinh duyêt thiêt bi khac.Trong trương hơp nay chung ta se dung đên thuôc tinh Contraints cua Route. Đo la

cach thiêt đăt quy tăt cho cac patameter.Kêt Hơp Regular Expressions:

Đê chăc chăn parameter la môt sô, chung ta co thê dung như sau:

Xac nhân id la sô co chiêu dai 6 ki tư. Vi du cac url hơp lê: Articles/1, Articles/123456….Kêt Hơp Vơi Phương Thưc HTTP:

Nêu muôn route chi nôi vơi phương thưc POST hoăc GET, chung ta co thê lơp HttpMethodConstraint no kê thưa tư IRouteConstraint:

Tao URL đi ra:15

Page 16: Tìm Hiểu Asp.Net MVC2

Viêc xư ly url đên mơi la môt nưa. Ưng dung phai cung câp đương link đê ngươi dung di chuyên đên nhưng nơi khac.

Đôi vơi Asp.Net Web Form hâu hêt cac ưng dung khac khi xây dưng link ta phai xây dưng chuôi vơi code môt cach cưng, vi du khi goi trang Details.aspx vơi tham sô id url se như sau: mylink.NavigateUrl=”~/Details.aspx”+ ItemID;

Trong MVC se viêt như sau:<a href=”Produc/Details/<%:ViewData[“ItemID”]%>” >Chi Tiêt</a>Tao Ra Hyperlinks vơi Html.ActionLink():

No se render ra url dang vơi action la List trong lơp ProductsController:

Cac Tham Sô Bô Sung:

No se render ra url dang:

Hoăc nêu route cua ban đa câu hinh dang: /Products/List/{color}/{page} thi code se render ra url dang:

Ta co thê thêm thuôc tinh cua thẻ Html như sau:

Đoan ma trên se tao ra Html như sau:

Tao url không co link:

16

Page 17: Tìm Hiểu Asp.Net MVC2

Đoan ma trên se co kêt qua như sau:

2.3.Controller Va Action Methods:Controller co trach nhiêm nhân đâu vao cua ngươi dung,lây dư liêu tư tâng Model va

di chuyên ngươi dung đên cac vung trong ưng dung, no như la câu noi giưa cac trang va cac tâng vơi nhau.

Tât ca cac Controller đêu kê thưa Icontroller.

Lơp Cơn Ban Cua Controller:Trong thưc tê chung ta hiêm khi hiên thưc trưc tiêp tư IController va viêt lai phương

thưc Execute(), bơi vi MVC Framwork cungcâp thanh phân cơ sơ : Action methods: Controller cua chung ta co thê co nhiêu phương thưc chư không

phai chi riêng Execute(). Mỗi môt action method co thê la chuyên đên url khac, va nhân parameter tư url đên..

Action results: chung ta co thê cai đăt đê tra vê môt đôi tương kêt qua cua môt action co thê la môt trang nôi dung, di chuyên sang url khac, hoăc action method.

Filters: la bô loc cho action method hoăc cho toan bô controller vao nhưng thơi điêm khac nhau trong qua trinh xư ly request.

Nhân Dư Liêu Đâu Vao Trong Controller:Controller thương xuyên nhân dư liêu đâu vao, như la query string, dư liêu tư form

hoăc nhưng tham sô đươc đưa vao tư url đên. Chung ta co ba cach đê nhân đươc dư liêu nay:

Lây ra tư môt context object. Lây dư liêu thông qua parameter trong action method. Hoăc goi trưc tiêp tư model binding

Lây Dư Liêu Tư Context Object:Nhưng context object thông dung:

Thuôc tinh Kiêu dư liêu Mô taRequest.QueryString NameValueCollection Nhưng biên GET gưi cung

requestRequest.Form NameValueCollection Nhưng biên POST gưi cung

requestRequest.Cookies HttpCookieCollection Nhưng cookie do browse

gưi cung request17

Page 18: Tìm Hiểu Asp.Net MVC2

Request.HttpMethod String Phương thưc http dung cho request(POST hoăc GET)

Request.Headers NameValueCollection Nhưng http header gưi cung request

Request.Url Uri Url đươc yêu câuRequest.UserHostAddress String Đia chi cua ngươi yêu câu

requestRouteData.Route RouteBase Route đươc chon cho

requestRouteData.Values RouteValueDictionary Tham sô cua route đươc

trich ra tư url hoăc gia tri măc đinh.

HttpContext.Application HttpApplicationStateBase Lưu trư trang thai ưng dungHttpContext.Cache Cache Lưu trư cache cua ưng dungHttpContext.Items IDictionary Lưu trư trang thai cua

request hiên taiHttpContext.Session HttpSessionStateBase Lưu trư trang thai cua phiên

lam viêcUser IPrincipal Thông tin xac thưc vê ngươi

đang nhâp hê thôngTempData TempDataDictionary Dư liêu tam thơi cua ngươi

dung hiên taiVi du:

Sư dung tham sô cho cac Action Method:Chung ta co thê dung đôi tương context đê lây dư liêu đâu vao băng cach:

Nhưng chung ta co thê viêt lai băng cach truyên tham sô ngăn gon như sau:

18

Page 19: Tìm Hiểu Asp.Net MVC2

Dung Model Binding trong Action Method Cua Controller:Dư liêu đên tư môt Form co thê co nhiêu thuôc tinh cua môt đôi tương. Khi nhân đươc

dư liêu ban co thê copy nhưng gia tri nay vao môt đôi tương, như vi du:

Viêc code như trên la rât chan va dê dang đoan đươc, rât may la chung ta co thê dung model binding đê nhân toan bô dư liêu cua đôi tương như la môt tham sô trong action method. Ban co thê goi model binding đê câp nhât bât ki thuôc thuôc tinh nao cua đôi tương ma ban đa tao trươc đo.

Hoăc ban co thê dung cach goi model binding ngâm đinh như sau:

Controller Tra Lai Dư Liêu Như Thê Nao:Sau khi nhân request controller tiên hanh xư ly va đap tra lai cho ngươi dung. Co 3

cach chinh ma controller tra vê kêt qua xư ly cho ngươi dung: Đo co thê tra lai nôi dung html băng cach hiên thi môt view.

19

Page 20: Tìm Hiểu Asp.Net MVC2

Đo co thê la chuyên hương đên trang khac băng cach mơ môt action method khac. Đo co thê la môt dong dư liêu như la JSON, XML hoăc co thê la môt file nhi phân.

Khai Niêm ActionResult:ActionResult tra lai kiêu cua action method, tra vê mô hinh cua view, môt file, chuyên

hương đên môt controller khac, lam cho controller trơ thanh thanh phân kêt nôi cac thanh phân cua hê thông, như la môt ngươi canh sat điêu khiên giao thông.

Cac kiêu action result:Kiêu Muc đich Vi duViewResult Hiên thi môt View return View();

return View(“MyView”,modelObject);PartialViewResult Hiên thi môt View return PartitalView();

RedirectToRouteResult Chuyên hương đên môt action method hoăc tao ra môt url theo câu hinh đinh tuyên cua ban

return RedirectToAction("SomeOtherAction", "SomeController"); return RedirectToRoute("MyNamedRoute");

RedirectResult Chuyên đên url tuyy

return Redirect("http://www.example.com");

ContentResult Tra lai dư liêu văn ban dang thô cho trinh duyêt

return Content(rssString, "application/rss+xml");

FileResult Tra vê dư liêu dang nhi phân cho trinh duyêt

return File(@"c:\report.pdf", "application/pdf");

JsonResult Gưi lai môt đôi tương dang JSON

return Json(someObject);

JavaScriptResult Tra lai đoan ma javascript thưc thi trên trinh duyêt

return JavaScript("$('#myelem').hide();");

HttpUnauthorizedResult Xac thưc ngươi dung đăng nhâp vao hê thông

return new HttpUnauthorizedResult();

EmptyResult return new EmptyResult();Tra Vê Đinh Dang HTML Băng Cach Hiên Thi Môt View:

Hâu hêt action method co nhiêm vu tra dang html cho trinh duyêt, tưc la tao ra môt khung nhin, tưc la môt ViewResult:

20

Page 21: Tìm Hiểu Asp.Net MVC2

Goi View() đê tao ra môt đôi tương ViewResult(), khi thưc thi kêt qua MVC FrameWork se tim trong ưng dung môt view chung ta chi đinh đê hiên thi.Nêu chung ta co sư dung areas thi no se tim ơ nhưng vi tri sau:

Nêu chung ta không sư dung areas hoăc tim không thây thi MVC FrameWork se tim ơ nhưng vi tri tiêp theo:

Chuyên Dư Liêu Tư Action đên View:Như đa biêt controller va view la 2 thanh phân khac nhau, controller cung câp dư liêu

cho view nhưng view không lam viêc trưc tiêp vơi controller, môt bô phân giup chuyên dư liêu giưa controller đên view la ViewData,Controller co thuôc tinh goi la ViewData co kiêu ViewDataDictionary.ViewDaTa Như La Môt Tư Điên:

Đâu tiên chung ta phai co đây đu ViewData cua controller vơi tên va gia tri tương ưng sau đo hiên thi view. Co thê truy câp vao gia tri cua ViewData trong view như sau:

21

Page 22: Tìm Hiểu Asp.Net MVC2

Strongly Type Object Trong ViewData.Model:ViewDataDictionary co thuôc tinh đăc biêt goi la Model

Bây giơ chung ta co thê truy câp vao ViewData.Model trong view như sau:

Tra Vê Dư Liêu Văn Ban:Ngoai đinh dang html ưng dung web con co nhiêu đinh dang khac nưa như: XML RSS va ATOM JSON (dung cho ưng dung sư dung AJAX) CSV (thương dung cho viêc xuât dư liêu ra đinh dang Exel) Văn ban thuân tuy

Đê thưc hiên thanh công viêc tra vê bât ki đinh dang dư liêu nao cân chu y 3 điêu như sau:

Dư liêu cua no la chuôi. Kiêu cua nôi dung gưi vê: text/xml cho XML, text/csv cho

CSV,application/rss+xml cho RSS. Co thê tim thây nhưng gia tri nay trong lơp System.Net.Mime.MediaTypeNames.

Dang dư liêu ma hoa đươc đăc ta như la môt đôi tương System.Text.Encoding, chuôi se đươc chuyên sang day cac byte đê gưi đi.

Nêu tra vê dang văn ban, va không quan tâm đên kiêu cua nôi dung, chung ta co thê lam tăt như sau, FrameWork se tư chuyên no sang ContentResult:

Tao RSS Feed:

22

Page 23: Tìm Hiểu Asp.Net MVC2

Vi du cach dung ContentResult. Đê tao RSS 2.0 chung ta dung ham tao tai liêu XML .NET 3.5 XDocument API va sau đo gưi đên cho trinh duyêt:

Tra Vê Dư Liêu Dang JSON:JavaScript Object Notation (JSON) la dang văn ban co câu truc, no đươc dung trong

ưng dung Ajax đê gưi môt đôi tương tư server đên trinh duyêt. Asp.net MVC đa xây dưng lơp JsonResult đê lam viêc vơi cac đôi tương JSON :

No se chuyên citiesArray sang đinh dang JSON như sau:

JsonResult se không lam viêc vơi phương thưc POST.Tra Vê Câu Lênh JavaScript :

Ta co thê dung phương thưc JavaScript() đê tra vê môt JavaScriptResult

Đê lam viêc nay ta phai sư dung đên MicrosoftAjax.js va MicrosoftMvcAjax.js 23

Page 24: Tìm Hiểu Asp.Net MVC2

Tra Vê File Va Dư Liêu Dang Nhi Phân:FileResult la lơp cơ sơ trưu tương dung cho viêc gưi dư liêu nhi phân đên trinh duyêt.

Asp.net MVC đa xây dưng 3 lơp con đê dung vao viêc nay: FilePathResult: gưi môt file trưc tiêp tư hê thông may chu. FileContentResult: gưi nôi dung la day cac byte tư bô nhơ. FileStreamResult: gưi nôi dung cua đôi tương System.IO.Stream ma chung ta đa

mơ tư môt nơi nao đo.Thông thương chung ta lai không sư dung 3 ham nay ma sư dung môt overload la

File().Gưi File Trưc Tiêp Tư Ô Đia:

Kêt qua cua câu lênh trên như sau:

Cac Tham Sô Trong Phương Thưc File():Tham sô Kiêu dư liêu Y nghiafilename (required) string Đương dân cua filecontentType(required) string Kiêu cua nôi dungfileDownloadName (optional)

string Tên file se gưi

2.4.Views :

24

Page 25: Tìm Hiểu Asp.Net MVC2

Thêm Nôi dung Vao View:Co 5 cach đê thêm dư liêu đông vao View:

Ky thuât Sư dungInline code La thanh phân đôc lâp vơi view, vi dun như

câu lênh if, foreach, nhưng câu lênh nay phai đăt trong <%: .. %> or <%=.. %>Inline code la công cu cơ sơ cac ky thuât khac đêu xây dưng dưa vao no.

HTML helpers Sư dung đê tao ra thê html, dư liêu se đươc lây tư ViewData hoăc bât ki môt Model nao băng cach tra vê môt MvcHtmlString

Server control Dung như trong Asp.Net Web FormPartial views Sư dung chung khi muôn chia se môt view

cho nhiêu thanh phân khacChild actions Tao nhưng giao diên dang control co thê

dung lai đươc.Sư Dung Inline Code:

Tao lơp Person như sau:

Tao môt view ShowPerson.aspx,va chon vao Creat a strongly-typed view,chon lơp Person:

Trong ShowPerson.aspx chung ta sư dung inline code như sau:25

Page 26: Tìm Hiểu Asp.Net MVC2

Hiên Thi Input Control:Control Vi duCheck box

Html.CheckBox("myCheckbox", false) se hiên thi như sau:

Hidden field

Html.Hidden("myHidden", "val") ->

Radio button

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

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

Text area Html.TextArea("myTextarea", "val", 5, 20, null)->

Text box Html.TextBox("myTextbox", "val")->

Dung Strongly Type Trong Viêc Tao Ra Input Control:Control Vi duCheck box

Html.CheckBoxFor(x => x.IsApproved) ->

Hidden field

Html.HiddenFor(x => x.SomeProperty)->

Radio button

Html.RadioButtonFor(x => x.IsApproved, "val") ->

26

Page 27: Tìm Hiểu Asp.Net MVC2

Password Html.PasswordFor(x => x.Password) ->

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

Text box Html.TextBoxFor(x => x.Name) ->

Thêm Thuôc Tinh Cho Cac The Html:

Kêt qua hiên thi như sau:

Nêu muôn thêm thuôc tinh class ta co thê lam như sau:

Kêt qua cua câu lênh trên như sau:

Hiên Thi Link Va Url:Mô ta Vi duĐưa ra đương dân

Url.Content("~/Views/Shared/Do an tot nghiep.pdf")->

Link đên môt action/controller

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

Link tuyêt đôi Html.ActionLink("Hi", "About", "Home", "https", "www.example.com", "anchor", new{}, null)->

Url cua action Url.Action("About", "Home") ->

Link đên route Html.RouteLink("Hi", new { controller = "c", action = "a" }, null) ->

Chung ta co thê thêm môt sô tham sô mơ rông trong khi goi route goi la routeValues :Html.ActionLink("Click me","MyAction",new{controller="Another", param = "val"})Nôi dung đươc hiên thi như sau:

Hiên Thi Dropdown List Va Multiselect Lists:Mô ta Vi duDrop-down list Html.DropDownList("myList", new SelectList(new [] {"A", "B"}),

"Choose") ->

Drop-down list Html.DropDownListFor(x => x.Gender, new SelectList(new [] {"M", "F"})) ->

27

Page 28: Tìm Hiểu Asp.Net MVC2

Multiselect list Html.ListBox("myList", new MultiSelectList(new [] {"A", "B"})) ->

Multiselect list Html.ListBoxFor(x =>x.Vals,new MultiSelectList(new [] {"A", "B"}))->

Tao môt lơp Region như sau:

Trong action method tao như sau:

Trong view thêm vao đoan code : <%: Html.DropDownList("region", "Choose") %>Kêt qua hiên thi như sau:

2.5.Models:

Khi sư dung Html helper, chung se hiên thi thanh phân cua form vơi tên va gia tri tương ưng vơi cac thuôc tinh trong model. Khi ngươi dung gưi request lên server hê

28

Page 29: Tìm Hiểu Asp.Net MVC2

thông model binding se so sanh dư liêu đên vơi kiêu cua đôi tương model, sau đo phân tach thanh phân phu hơp vơi điêu kiên validation.Templated View Helper:

Cung câp nhưng tuy chon đê chung ta co thê hiên thi hoăc sưa chưa môt đôi tương model hay thuôc tinh cua no nhưng không cân phai dung đên yêu tô html, no cho phep ban hiên thi theo template cua đôi tương hoăc thuôc tinh cua model.Hiên Thi Va Sưa Chưa Model Sư Dung Templated View Helper:Tên Vi du Muc đichDisplay Html.Display("Title") Hiên thi view chi đoc đăc ta

thuôc tinh cua model,hiên thi template theo thuôc tinh cua kiêu đôi tương liên kêt vơi no.

DisplayFor Html.DisplayFor(x => x.Title) Sư dung giông như trên nhưng co sư dung strongly-type

DisplayForModel Html.DisplayForModel() Viêt tăt cua Html.DisplayFor(x => x.Title).Hiên thi view chi đoc đôi vơi môt đôi tương model.

Editor Html.Editor("Title") Hiên thi view đê sưa chưa thuôc tinh cua model

EditorFor Html.EditorFor(x => x.Title) Sư dung strongly-typeEditorForModel Html.EditorForModel() Viêt tăt cua Html.EditorFor(x

=> x.Title)Label Html.Label("Title") Hiên thi thẻ html lableLabelFor Html.LabelFor(x => x.Title) Sư dung strongly-typeLabelForModel Html.LabelForModel() Viêt tăt cua Html.LabelFor(x

=> x.Title)DisplayText Html.DisplayText("Title") Hiên thi chuôi đăc ta thuôc tinh

cua modelDisplayTextFor Html.DisplayTextFor(x =>

x.Title)Sư dung strongly-type

Tao 2 lơp như sau:

Tao view sư dung strongly-type Person, thêm code như sau:

29

Page 30: Tìm Hiểu Asp.Net MVC2

Kêt qua hiên thi như sau:

Cac lơp trong .Net chi cung câp môt sô lương co han cac thông tin ma no chưa, no chi cung câp loai va tên cua cac thuôc tinh, Asp.Net MVC cung câp model metadata đê mơ rông thêm thông tin cho model, no cung câp viêc lam thê nao đê hiên thi dư liêu đê xem hay sưa chưa, cung câp cach thưc đê xac nhân dư liêu đên.

Tao lơp Person như sau:

Khi hiên thi se như sau:

30

Page 31: Tìm Hiểu Asp.Net MVC2

Thay vi sư dung Html.EditorForModel ta co thê sư dung Html.Editor hoăc Html.EditorFor ta co thê sưa lai view như sau

Kêt qua se như sau:

31

Page 32: Tìm Hiểu Asp.Net MVC2

Chu Thich Dư Liêu:Thuôc tinh Kêt qua[DisplayColumn] Thuôc tinh se đươc hiên thi[DataType] Kiêu gia tri cua dư liêu[ReadOnly] Thuôc tinh chi cho phep đoc[DisplayFormat] Đinh dang khi hiên thi vi du: đinh dang chuôi {0:c} hiên thi sô theo

dang tiên tê[Required] Thuôc tinh băt buôc phai co

32