NET Framework và ASP.NET

Tài liệu NET Framework và ASP.NET: ... Ebook NET Framework và ASP.NET

doc108 trang | Chia sẻ: huyen82 | Lượt xem: 2370 | Lượt tải: 0download
Tóm tắt tài liệu NET Framework và ASP.NET, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Môc Lôc Lêi nãi ®Çu Thế hệ kế tiếp của Internet sẽ như thế nào? Nhiều người trong chúng ta sẽ hình dung một thế giới trực tuyến trong đó các máy PC, server, thiết bị thông minh và các dịch vụ trên nền Internet có thể tương tác khăng khít với nhau. Các doanh nghiệp sẽ có thể chia xẻ dữ liệu, tích hợp các quá trình nghiệp vụ cũng như sức lực để đem lại các giải pháp tổng hợp cho khách hàng. Và thông tin mà ta hoặc doanh nghiệp của ta cần đến sẽ luôn luôn sẵn sàng bất cứ đâu và trên bất kỳ một nền tảng hoặc một ứng dụng nào. §ã còng lµ lý do mµ Microsoft ®­a ra .NET Framework, nÒn t¶ng lµm thay ®æi tËn gèc kiÓu lËp tr×nh truyÒn thèng, lµm cho tÇm nh×n trªn hoµn toµn cã thÓ ®¹t tíi. Cïng víi ASP.NET c«ng viÖc lËp tr×nh m¸y chñ giê ®©y dÔ dµng h¬n bao giê hÕt vµ kh«ng ph¶i häc thªm ng«n ng÷ míi Trong khu«n khæ cña mét ®å ¸n tèt nghiÖp, ®å ¸n sÏ tËp trung vµo viÖc cung cÊp mét c¸i nh×n tæng qu¸t vÒ .NET Framework vµ ASP.NET mµ kh«ng ®i s©u vµo t×m hiÓu thñ thuËt lËp tr×nh. Víi mét øng dông nhá víi ASP.NET vµ c¬ së d÷ liÖu Oracle chØ ®Ó gióp hiÓu s©u h¬n vÒ ASP.NET ch­a thùc sù lµ mét øng dông kinh doanh hoµn chØnh. PhÇn I: C¸c kÜ thuËt t¹o trang tµi liÖu 1.1 Trang tµi liÖu Internet HTML. Sù ra ®êi cña Internet ®· t¹o mét m«i tr­êng th«ng tin tuyÖt vêi nhÊt tõ tr­íc tíi nay cho nhu cÇu häc hái vµ trao ®æi th«ng tin cña con ng­êi. Internet ho¹t ®éng dùa trªn sù liªn kÕt cña hµng ngµn m¸y chñ vµ hÖ thèng m¹ng trªn kh¾p thÕ giíi. Ban ®Çu ng­êi ta chØ cã nhu cÇu lÊy c¸c tµi liÖu vµ ®äc chóng b»ng mét ch­¬ng tr×nh øng dông mµ ta hay goÞ lµ browser. Tµi liÖu ®­îc l­u trªn m¸y chñ nµo ®ã, m¸y kh¸ch kÕt nèi vµo vµ lÊy vÒ theo mét giao thøc m¹ng. Tµi liÖu ë ®©y ®­îc nãi ®Õn tÊt c¶ nh÷ng g× chøa ®ùng th«ng tin mµ con ng­êi cã thÓ hiÓu ®­îc bao gåm c¸c ®o¹n v¨n b¶n, h×nh ¶nh, ©m thanh, video.. Vµ c¸c trang tµi liÖu ®Çu tiªn trªn Internet ®· dïng ng«n ng÷ ®Þnh d¹ng HTML (Hyper Text Markup Language- Ng«n ng÷ ®¸nh dÊu siªu v¨n b¶n). HTML xoay quanh kh¸i niÖm chñ yÕu gäi lµ tiªu thøc (tag) lµm nÒn t¶ng. §Ó t¹o ra mét siªu v¨n b¶n ta cã thÓ dïng bÊt cø mét tr×nh so¹n th¶o nµo nh­ NC, EDIT.. cña DOS ,NotePad cña Windows.. Vµ chØ cÇn n¾m v÷ng c¸c tiªu thøc cña HTML vµ chó ý khi ghi lªn ®Üa th× ghi d­íi d¹ng *.html hay *.htm. Toµn bé c¸c tag cña HTML ®îc chia ra thµnh 7 nhãm thµnh phÇn nh­ sau: Tõ kho¸ x¸c lËp cÊu tróc tµi liÖu. Tõ kho¸ t¹o ®iÓm mãc nèi. Tõ kho¸ ®Þnh d¹ng khèi. Tõ kho¸ khai b¸o danh s¸ch. Tõ kho¸ khai b¸o lo¹i th«ng tin vµ ®Þnh d¹ng mÉu ch÷. Tõ kho¸ ®­a h×nh ¶nh vµo tµi liÖu. Tõ kho¸ lËp mÉu biÓu b¶ng. §Ó hiÓu ®­îc c¸c trang tµi liÖu HTML ta cÇn cã mét ch­¬ng tr×nh øng dông cã thÓ hiÓu ®­îc quy ­íc cña c¸c tag ®ã. øng dông nµy chÝnh lµ tr×nh duyÖt. Tr×nh duyÖt sau khi nhËn ®­îc trang tµi liÖu HTML nã sÏ ph©n tÝch c¸c thÎ vµ hiÓn thÞ néi dung cu¶ c¸c thÎ nµy theo quy ­íc. Tõ khi HTML ra ®êi cho ®Õn nay ®· cã rÊt nhiÒu tr×nh duyÖt phôc vô viÖc hiÓn thÞ tµi liÖu. 1.2.C¸c kh¸i niÖm c¬ b¶n: 1.2.1 Web browser: Web browser lµ c«ng cô truy xuÊt d÷ liÖu trªn m¹ng, lµ phÇn mÒm giao diÖn trùc tiÕp víi ng­êi sö dông. Nã cã kh¶ n¨ng yªu cÇu th«ng tin tõ Web server vµ c¸c dÞch vô kh¸c theo nhu cÇu cña ng­êi sö dông. + Netsape Navigator + Microsof Internet Explorer + Lynx ( Unix ) PhÇn lín c¸c Web browser ®Òu hç trî mét danh s¸ch c¸c ®Æc tr­ng víi kh¶ n¨ng xö lý víi c¸c file*.HTML, *.GIF, JPG... NhiÒu Web browser cã kh¶ n¨ng xö lý víi Java vµ JavaScvipt... 1.2.2 Web server: B­íc ®Çu cña c«ng nghÖ Web, Web server chØ ®¬n gi¶n lµ lÊy toµn bé néi dung cña file d÷ liÖu trªn m¸y chñ ®Ó tr¶ vÒ cho tr×nh kh¸ch. Tuy nhiªn, xuÊt ph¸t tõ nhu cÇu xö lý ®éng, tr×nh chñ Web server cho phÐp cµi ®Æt c¸c øng dông CGI (Common Gateway Interface) tiÕp nhËn nh÷ng yªu cÇu cña tr×nh kh¸ch, thùc hiÖn c¸c thao t¸c biÕn ®æi tr­íc khi ®­a tíi Web browser. 1.2.3 Ph©n lo¹i Web Theo quan ®iÓm cña Martin Rennhackkawp (T¹p chÝ DBMS 5/97) cho r»ng cã thÓ ph©n lo¹i Web thµnh 3 lo¹i: Trang web tÜnh (static), Form pages vµ web ®éng (dynamic). + Trang Web tÜnh. Tµi liÖu ®­îc ph©n t¸n rÊt ®¬n gi¶n tõ hÖ thèng file cña Server. Web Server sÏ tiÕn hµnh t×m kiÕm vµ x¸c ®Þnh ®óng vÞ trÝ cña c¸c file ®ã vµ göi tr¶ l¹i kÕt qu¶ cho Client. ViÖc sö dông trang Web tÜnh cã ­u, nh­îc ®iÓm râ rµng. ¦u ®iÓm: Khi c¬ së d÷ liÖu nhá th× viÖc ph©n ph¸t d÷ liÖu cã hiÖu qu¶. C¸c yªu cÇu tõ Client ®­îc ®¸p øng nhanh chãng. Nh­îc ®iÓm: Kh«ng n¨ng ®éng, kh«ng ®¸p øng nhu cÇu th«ng tin, v× vËy kh«ng ®¸p øng ®­îc nh÷ng yªu cÇu phøc t¹p cña ng­êi sö dông. + Form pages. VÒ b¶n chÊt form pages lµ tr­êng hîp ®Æc biÖt cña trang web tÜnh. Nã cho phÐp nhËn ®­îc ph¶n håi tõ phÝa ng­êi sö dông th«ng qua form. + Web ®éng. Trang web nµy cã thÓ thao t¸c víi c¬ së d÷ liÖu ®Ó ®¸p øng nhu cÇu phøc t¹p cña ng­êi dïng. VD: ng­êi dïng cÇn cã nh÷ng th«ng tin thay ®æi hµng ngµy th× viÖc thao t¸c víi c¬ së d÷ liÖu bªn ngoµi lµ cÇn thiÕt. Cã nhiÒu c¸ch cã thÓ truy cËp ®Õn c¬ së d÷ liÖu bªn ngoµi. ISAPI ( Internet Server Aplication Programming Intefaces), ASP ( Active Server Pages) hay Java, CGI ( Common Gateway Interface). MICROSOFT cung cÊp tr×nh chñ web server (IIS: Internet Information Servce) cho phÐp sö dông c¸ch thøc t¹o web ®éng b»ng CGI, ISAPI vµ ASP. 1.3 C¸c tr×nh CGI (Common Gateway Interface). C¸c tr×nh CGI th­êng ®­îc viÕt b»ng visual C++ ,Delphi ,Visual basic. (c¸c tr×nh biªn dÞch file thùc thi trªn m«i tr­êng windows) chóng ®­îc dÞch ra file thùc thi .exe vµ ®Æt trong th­ môc /cgi-bin cña tr×nh chñ IIS . Mçi khi nhËn ®­îc yªu cÇu cña kh¸ch hµng web server IIS sÏ gäi ®Õn ch­¬ng tr×nh CGI ,chuyÓn giao c¸c cÇu tõ tr×nh kh¸c cho CGI xö lý. Hoµn tÊt qu¸ tr×nh xö lý CGI sÏ tr¶ hÕt l¹i hÕt cho web server vµ web server l¹i tr¶ cho kh¸ch d­íi d¹ng thÓ hiÖn HTML. Qu¸ tr×nh gäi vµ xö lý CGI lµ hoµn toµn trong suèt (transparent) ®èi víi kh¸ch hµng do c¸c tr×nh CGI lµ ch­êng tr×nh thùc thi nhÞ ph©n ®ßi hái c¸c ng«n ng÷ biªn dÞch . Tr×nh CGI sau khi x©y dùng muèn n©ng cÊp ®ßi hái ph¶i biªn dÞch l¹i . Mét sè tr×nh CGI cho phÐp ng­êi sö dông thªm vµo mét sè lÖnh ®iÒu khiÓn , c¸c lÖnh ®iÒu khiÓn nµy ®­îc ®Æt ngay trong tµi liÖu (chóng ®­îc gäi lµ c¸c lÖnh Script) CGI sÏ ®äc vµ biªn dÞch thùc thi trôc tiÕp c¸c script nµy . MÆc dï vËy c¬ chÕ CGI tá ra ch©m ch¹m vµ kÐm hiÖu qu¶ . Mçi lÇn nhËn ®­îc yªu cÇu cña tr×nh kh¸ch , web server, ph¶i n¹p l¹i tr×nh CGI vµo bé nhí, xö lý nã sau ®ã gi¶i phãng vµ thÓ hiÖn (instance) cña cïng tr×nh CGI cho mçi yªu cÇu riªng biÖt trong khi m· lÖnh xö lý cña chóng nh­ nhau. 1.4 Giao diÖn cña lËp tr×nh øng dông Internet ISAPI ISAPI (Internet Server Application Programing Interface) g¾n liÒn víi tr×nh chñ IIS . Thay v× viÕt CGI xö lý trang ®éng c¸c nhµ ph¸t triÓn cã thÓ xö dông ISAPI ®Ó x©y ®ông nh÷ng ®¬n thÓ tån t¹i cïng víi c¸c web server trong suèt qu¸ tr×nh chê yªu cÇu cña tr×nh kh¸ch c¸c ®¬n thÓ ISAPI ®­îc viÕt ë d¹ng file .dll. m· lÖnh cña chóng ho¹t ®éng trao ®æi d÷ liÖu trong cïng kh«ng gian ®Þa chØ cña ch×nh chñ web IIS . Tèc ®é xö lý cña ISAPI do ®ã rÊt nhanh tiÕt kiÖm tµi ngyªn h¬n h¼n CGI . 1.5. ASP Mét trë ng¹i cña ®¬n thÓ ISAPI còng nh­ tr×nh CGI ®ã lµ ph¶i sö dông c¸c ng«n ng÷ biªn dÞch . kh¶ n¨ng vµ b¶o tr× vµ thiÕt kÕ mét øng dông lµ rÊt thÊp. NÕu CGI hç chî kÞch b¶n th«ng dÞch ë d¹ng script lµm ®¬n gi¶n ho¸ vµ lo¹i bá qu¸ tr×nh viÕt m· cña c¸c ng«n ng÷ biªn dÞch thÊp, kü thuËt ISAPI còng cho phÐp ta sö dông c¸c trang ch­a script c¸c trang nµy chÝnh lµ ASP (Ative Server Page) Trang ASP ®¬n thuÇn lµ file v¨n b¶n chøa m· HTML kÕt hîp th«ng dÞch VB scrÞpt hay jscript. §¬n thÓ asp.dll (mét ®¬n thÓ cña ISAPI) ®­îc tÝch hîp vµo web sever IIS . Khi nhËn ®­îc yªu cÇu cña tr×nh kh¸ch cÇn hiÓn thÞ .asp th× tr×nh chñ sÏ triÖu gäi ®¬n thÓ xö lý trang asp.dll trang ®­îc ®äc vµ thùc thi c¸c lÖnh cña kÞch b¶n. KÕt qu¶ sau ®ã ®­îc asp.dll göi l¹i tr×nh chñ göi l¹i theo yªu cÇu cña kh¸ch. M« h×nh xö lý trang ASP thay cho CGI. Microsoft Active Server Pages (ASP) kh«ng h¼n lµ mét ng«n ng÷ lËp tr×nh, Microsoft gäi nã lµ m«i tr­êng server-side scripting, m«i tr­êng nµy cho phÐp t¹o vµ ch¹y c¸c c¸c øng dông Web server ®éng, t­¬ng t¸c vµ cã hiÖu qu¶ cao. §Ó lµm viÖc trong m«i tr­êng nµy, c¸c ASP coder thêng sö dông VBScript hoÆc JavaScript, c¶ hai lo¹i nµy ®Òu tù ®éng hç trî ASP. Trong c¸c HTML, mçi tag ®­îc b¾t ®Çu vµ kÕt thóc bëi cÆp "" , ASP còng t­¬ng tù nh­ vËy. §Ó ®¸nh dÊu n¬i nµo ASP script b¾t ®Çu vµ kÕt thóc dïng cÆp lÖnh "". C¸c ®o¹n ASP script cã thÓ xuÊt hiÖn ë mäi n¬i trong trang HTML, ASP & HTML cã sù g¾n bã chÆt chÏ víi nhau. Víi ASP ta cã thÓ chÌn c¸c script thùc thi ®­îc vµo trùc tiÕp c¸c file HTML. Khi ®ã viÖc t¹o ra trang HTML vµ xö lý script trë nªn ®ång thêi, ®iÒu nµy cho phÐp t¹o ra c¸c t­¬ng t¸c cña Website mét c¸ch linh ho¹t uyÓn chuyÓn, cã thÓ chÌn c¸c thµnh phÇn HTML ®éng vµo trang Web tuú vµo tõng tr­êng hîp cô thÓ. C¸c ®èi t­îng vµ thµnh phÇn cña ASP kh«ng kh¸c g× so víi c¸c thµnh phÇn ActiveX th«ng th­êng, c¸c ActiveX dll ®­îc sö dông trong Vb, VC++ hay Java. Sù kh¸c biÖt lµ ë chç chóng ®· ®­îc kÕt hîp víi VbScipt. §èi t­îng cña ASP (ASP Objects) lµ nh÷ng phÇn tö ActiveX cã s½n vµ ®­îc g¾n víi VbScript ASP cung cÊp 4 ®èi t­îng sau: Application, Session, Request, Response, Server Object. C¸c thµnh phÇn cña ASP (ASP Components) lµ nh÷ng th­ viÖn dll tån t¹i ngoµi bé khung ASP. Nh÷ng thµnh phÇn nµy cã thÓ ®­îc t¹o b»ng bÊt k× ng«n ng÷ nµo nh­ng Microsoft ®· kÕt hîp mét sè component h÷u Ých víi Visual InterDev. ASP cung cÊp nh÷ng component sau: Data Access, File Access, Browser Cappabilities, AdRotator C¸c h¹n chÕ cña ASP ASP chØ ch¹y vµ t­îng thÝch trªn m«i tr­êng Windows ®iÒu nµy lµm ASP bÞ h¹n chÕ rÊt nhiÒu. Dïng ASP sÏ gÆp ph¶i khã kh¨n khi muèn can thiÖp s©u vµo hÖ thèng nh­ c¸c øng dông CGI. ASP kh«ng ®­îc hç trî nhiÒu tõ h·ng thø ba. C¸c øng dông ASP tá ra chËm h¬n so víi Java. TÝnh b¶o mËt kh«ng cao. Kh«ng gi«ng nh­ c¸c øng dông CGI hay Java servlet, c¸c m· ASP ®Òu cã thÓ ®äc ®­îc nÕu ng­êi dïng cã quyÒn truy cËp vµo Web server. Cã lÏ ®©y lµ lý do quan träng nhÊt ®Ó ng­êi dïng kh«ng chän c«ng nghÖ ASP. PhÇn II : ASP.NET 2.1. Bé Khung DÞch Vô Web ThÕ HÖ KÕ TiÕp(NGWSF) HÖ ®iÒu hµnh ®­îc Microsoft xem lµ mét tËp hîp bao gåm nhiÒu ®èi t­îng ho¹t ®éng t­¬ng t¸c lÉn nhau. Ch­¬ng tr×nh cña ta còng lµ mét ®èi t­îng. Microsoft gäi m« hÞnh nµy víi c¸i tªn kh¸ phæ biÕn lµ COM (Compontent Objoct Model). TÊt c¶ mäi thø ®Òu quy vÒ ®èi t­îng víi ph­¬ng thøc, thuéc tÝnh vµ c¸c dÞch vô mµ ®èi t­îng cã thÓ cung cÊp. Ph¸t triÓn h¬n n÷a Microsoft më réng COM thanh kiÕn tróc COM+ cho phÐp c¸c ®èi t­îng COM më réng giao tiÕp víi nhau trªn mäi nÒn Windows, tõ 98, NT/2000, m¸y chñ (Server), m¸y kh¸c (client) ®©u ®©u còng lµ c¸c thµnh phÇn ®èi t­îng cã thÓ giao tiÕp vµ triÖu gäi nhau xuyªn suèt Víi sù bïng næ cña Internet, Microsoft mét lÇn n÷a l¹i ®­a kiÕn tróc COM+ thanh m« h×ng ®èi t­îng cao h¬n ¶nh h­ëng ®Õt toµn bé hÖ ®iÒu hµnh. KiÕn tróc míi nµy mang tªn khung dÞch vô Web thÕ hÖ kÕ tiÕp - Next Generation Web service Framework hay NGWSG. Tuy mang tªn Web nh­ng thùc tÕ kiÕn tróc nµy ®· ¨n s©u vµo hÖ ®iÒu hµnh. NGWSG bæ sung c¸c dÞch vô míi cho c¸c ®èi t­îng øng dông ph©n t¸n COM+ bao gåm: * Mét tËp c¸c th­ viÖn lËp tr×nh phong phó vµ thèng nhÊt. * Bé thùc thi ch­¬ng tr×nh ®a ng«n ng÷ (multi-language runtime engine)vµ b¶o vÖ an toµn m· thùc thi. * §¬n gi¶n ho¸ qu¸ tr×nh t¹o lËp, ph©n phèi vµ b¶o tr× øng dông. * T¨ng tÝnh mÒm dÎo vµ kh¶ chuyÓn cho c¸c óng dông ph©n t¸n. * B¶o vÖ c¸c phÇn mÒm hiÖn cã vµ gi¶m ®Çu t­ vÒ ®µo t¹o. 2.1.2 T×m HiÓu VÒ Khung NÒn NGWSF ViÖc tÝch hîp ASP vµo hÖ ®iÒu hµnh ë phiªn b¶n ASP.NET lµ ®iÓm kh¸c biÖt rÊt quan träng so víi c¸c phiªn b¶n kh¸c cña ASP tr­íc ®ã. C¸c phiªn b¶n ASP tr­íc ®©y(2.0 hoÆc3.0) chØ ®­îc dïng vµ g¾n vµo hÖ thèng nh­ thµnh phÇn hç trî(add-on). KÓ c¶ phiªn b¶n míi nhÊt lµ 3.0 còng vÉn tån t¹i kh¸i niÖm kÕt g¾n ASP theo kh¸i niÖm add-on dùa vµo kü thuËt ISAPI DLL. ASP 3.0 sö dông file th­ viÖn asp.dll cïng mét vµi file phô kh¸c t¹o thµnh phiªn b¶n ASP 3.0 ®Ó n©ng cÊp phiªn b¶n 2.0 Tuy nhiªn, bé khung trong kiÕn tróc NGWSF ®· thay ®æi hoµn toµn khai niÖm vÒ øng dông c«ng nghÖ th«ng tin trªn nÒn t¶ng Internet. Víi NGWSF ta cÇn ph¶i thay ®æi l¹i toµn bé c¸ch nh×n nhËn so víi c¸c øng dông trong m«i tr­êng Windows cò. KiÕn tróc NGWSF cho phÐp ta hoµn chØnh mäi kiÓu øng dông tõ ®ãng gãi, ph¸t triÓn b¶o tr×, kiÓm tra c¸c øng dông trªn tr×nh kh¸ch (client) cho ®Õn c¸c øng dông ph©n t¸n phøc t¹p trªn tr×nh chñ (server).Toµn bé kh¸i niÖm cña NGWSF lµ mét phÇn dùa trªn ý t­ëng vµ nÒn t¶ng cña kiÕn tróc “øng dông Internet ph©n t¸n” (DNA-Distributed Internet Application). Tuy nhiªn,®iÒu quan träng ta cÇn nªn nhí ®ã lµ bé khung NGWSF kh«ng ®¬n thuÇn chØ dµnh riªng cho ASP.NET. Khung NGWSF nµy ¶nh h­ëng ®Õn toµn bé c¸c ch­¬ng tr×nh øng dông sÏ ch¹y trªn Windows trong t­¬ng lai. H¹t nh©n hÖ ®iÒu hµnh Bé khung .NET Framework Trang ASP.NET ASP.NET Webservice Thµnh phÇn hç trî.NET øng dông Windows truyÒn thèng Windows vµ c¸c dÞch vô hÖ ®iÒu hµnh. 2.1.3 M« h×nh .NET Framework. Khung lµm viÖc NGWSF cung cÊp bé m¸y thùc thi m· lÖnh (execute engine) cïng víi tËp hîp c¸c líp hay thanh phÇn h­íng ®èi t­îng cã thÓ sö dông ®Ó t¹o nªn øng dông. Bé khung nµy lµm viÖc nh­ lµ líp giao tiÕp gi÷a øng dông vµ h¹t nh©n cña hÖ ®iÒu hµnh. Ta cã thÓ hái t¹i sao chóng ta l¹i cÇn ®Õn mét líp trung gian nh­ thÕ, trong khi øng dông theo truyÒn thèng cã thÓ dÔ dµng nãi chuyÖn trùc tiÕp víi h¹t nh©n vµ c¸c dÞch vô cña hÖ ®iÒu hµnh. Nguyªn do lµ tÇng trung gian nµy sÏ cho phÐp c¸c øng dông nµy sö dông tèt h¬n c¸c ­u diÓm cña hÖ ®iÒu hµnh, ®¬n gi¶n ho¸ qu¸ tr×nh ph¸t triÓn vµ ph©n phèi øng dông trong m«i tr­êng th­¬ng m¹i ®Çy c¹nh tranh. §Ó ®¹t ®­îc môch ®Ých nµy, bé khung thùc thi runtime cña NGWSF ®· cµi ®Æt rÊt nhiÒu ®Æc ®iÓm mµ lËp tr×nh viªn hay mét m«i tr­êng ng«n ng÷ lËp tr×nh cô thÓ nµo ®ã ph¶i tù cµi ®Æt tr­íc ®©y. Bé khung nµy cung cÊp c¸c c¬ chÕ nh­ tù ®éng thu gom r¸c vµo bé nhí (garbage collector), tËp c¸c ®èi t­îng ®Çy ®ñ nh÷ng chøc n¨ng phôc vô cho nh÷ng c«ng viÖc lËp tr×nh th«ng th­êng nhÊt. T¨ng kh¶ n¨ng b¶o mËt vµ an toµn cho øng dông. Chøc n¨ng b¶o mËt sau cïng rÊt quan träng,nhÊt lµ ®èi víi c¸c ch­¬ng tr×nh më réng triÖu gäi th«ng qua m¹ng Internet nh­ ngµy nay Microsoft ®ang h­íng ®Õn m« h×nh m¸y ¶o t­ëng t­îng t­¬ng tù nh­ Virtual machine cña Java ë kiÕn tróc NGWSF nµy. 2.1.4 Ng«n Ng÷ Trung Gian Phæ Dông Tuy nhiªn mét trong nh÷ng ­u ®iÓm næi bËt nhÊt cña bé khung thùc thi cung cÊp cho ta ®ã lµ m«i tr­êng thùc thi trung lËp vÒ ng«n ng÷. TÊt c¶ m· lÖnh bÊt kÓ viÕt b»ng ng«n ng÷ nµo ®Òu ®­îc tù ®éng biªn dich thanh ng«n ng÷ trung gian gäi lµ IL(Intermediate Language). Bé khung thùc thi sÏ t¹o ra m· nhÞ ph©n cuèi cung h×nh thanh lªn øng dông vµ ®iÒu khiÓn m·. §èi víi c¸c trang ASP.NET, m· nguån sÏ ®­îc dÞch ra vµ chØ cã m· IL vµ chØ cã m· IL ®­îc gäi thùc thi. Khi m· nguån thay ®æi th× m· IL cña trang ASP.NET sÏ ®­îc thay ®æi l¹i.C¸c trang ASP.NET cßn gi÷ trong vïng ®Öm cache sÏ bÞ huû bá thay b»ng c¸c trang biªn dÞch ASP.NETvíi m· IL míi. Mét ­u ®iÓm n÷a lµ ta gäi m· lÖnh cña mét ng«n ng÷ lËp tr×nh hoµn toµn kh¸c víi ng«n ng÷ ®ang ®­îc dïng ®Ó viÕt øng dông. NghÜa lµ ta cã thÓ t¹o ra ®èi t­îng tõ mét ng«n ng÷, sau ®ã triÖu gäi hoÆc thay ®æi néi dung ®èi t­îng tõ mét ng«n ng÷ kh¸c.VÝ dô, nh­ ta cã thÓ t¹o ra mét ®èi t­îng tõ ng«n ng÷ C# sau ®ã kÕ thõa vµ t¹o ra mét ®èi t­îng tõ ng«n ng÷ Visual Basic (VB) nh­ thªm vµo ph­¬ng thøc, thuéc tÝnh, thay ®æi hoÆc ®Ì chång lªn c¸c ph­¬ng thøc tr­íc ®ã.. Thùc tÕ, mét phÇn cña bé khung NGWSF vµ toµn bé m« h×nh ASP.NET ®­îc cµi ®Æt bªn trong b»ng C# thay v× C++. Râ rµng bé khung thùc thi ®· vµ ®ang h­íng chóng ta ®Õn m«i tr­êng lËp tr×nh ®a ng«n ng÷ thuÇn nhÊt. Ta cã thÓ cïng mét øng dông tõ bÊt kú ng«n ng÷ lËp tr×nh nµo. KÕt qu¶ m· nhÞ ph©n cña chóng lµ nh­ nhau. §©y qu¶ lµ mét ®iÒu tuyÖt vêi ®èi víi c¸c nhµ ph¸t triÓn ph©n phèi øng dông trªn m«i tr­êng Internet ®a nÒn nh­ hiÖn nay. 2.1.5 Cë Së H¹ TÇng Cña øng Dông Web H¹ tÇng cña c¸c øng dông Web n»m trong mét phÇn cña kiÕn tróc .NET NGWSF.Chung bao gåm c¸c dÞch vô Web vµ trang ASP.NET.Cïng víi bé khung míi cña m«i tr­êng thùc thi øng dông . NET,c¸c øng dông vµ dÞch vô Web ®­a ra nh÷ng ®Æc ®iÓm næi bËt sau: + Hç Trî Giao DiÖn Ng­êi Dïng C¸c thanh phÇn ®iÒu khiÓn ®a n¨ng (Rich control) lµ mét phÇn trong cµi ®Æt cña th­ viÖn ASP.NET. Nh÷ng ®iÒu khiÓn nµy gióp ta t¹o ra giao diÖn Web nhanh chãng vµ ®¬n gi¶n. Thµnh phÇn rich control ch¹y trªn Server vµ cã kh¶ n¨ng t¹o ra m· HTML 3.2 t­¬ng thÝch víi hÇu hÕt c¸c tr×nh duyÖt cò. §ång thêi ta cã thÓ sinh m· tËn dông c¸c tÝnh n¨ng n©ng cao hç trî bëi tr×nh duyÖt phÝa m¸y kh¸ch nh­ HTML 4.0. C¸c dÞch vô hç trî bëi Internet Explorer 4,5,6…Ta cã thÓ më réng, kÕ thõa vµ t¹o ra c¸c thµnh phÇn ®iÒu khiÓn ®a n¨ng kh¸c dùa trªn c¸c thµnh phÇn chuÈn cña th­ viÖn s½n cã. + Hç Trî Truy XuÊt D÷ LiÖu M«i tr­êng NGWSF cung cÊp phiªn b¶n míi cña ADO goi lµ ADO+. Phiªn b¶n ADO+cho phÐp truy xuÊt d÷ liÖu bÊt kÓ khu«n d¹ng vµ vÞ trÝ cña d÷ liÖu. ADO+ thiÕt kÕ theo m« h×nh h­íng ®èi t­îng trªn d÷ liÖu quan hÖ, chóng cho phÐp c¸c nhµ ph¸t triÓn cã kh¶ n¨ng trÝch rót d÷ liÖu tõ c¸c nguån ph©n t¸n kh¸c nhau. ADO+ còng t¨ng c­êng kh¶ n¨ng hç trî d÷ liÖu XML(cßn gäi lµ dataset trong XML) l­u tr÷, ®ãng gãi vµ truyÒn ®i trong m¹ng. D÷ liÖu XML cã thÓ ®äc vµ hiÓu ®­îc bëi rÊt nhiÒu øng dông trªn Internet. + Kh¶ N¨ng Më Réng Dµnh Cho C¸c øng Dông ph©n t¸n Hai yÕu cÇn thiÕt ®èi víi tÊt c¶ c¸c øng dông dùa trªn nÒn Web ®ã lµ hÖ ®iÒu hµnh nÒn (platform) ph¶i v÷ng ch¾c vµ kh¶ n¨ng më réng trªn m«i tr­êng truy xuÊt lín cho phÐp ®ång thêi xö lý nhiÒu kÕt nèi. M«i tr­êng thùc thi NGWSF cung cÊp c¸c chøc n¨ng tù ®éng kiÓm tra lçi vµ c¸c tr­êng hîp qu¸ t¶i. NGWSF sÏ t×m c¸ch khëi ®éng vµ t¸i t¹o c¸c øng dông còng nh­ thµnh phÇn ®èi t­îng ®Ó kh¶ n¨ng phôc vô cña chóng cho c¸c kÕt nèi tèt h¬n. §iÒu nµy sÏ gi¶m thiÓu nh÷ng lçi nh­ tµi nguyªn hÖ thèng c¹n kiÖt,kÕt nèi t¾c nghÏn…. HÖ ®iÒu hµnh còng ®­îc cËp nhËt víi nh÷ng dÞch vô h¹ tÇng míi nh­ dÞch vô cho phÐp tù qu¶n lý vµ dän dÑp r¸c trong bé nhí (garbage collector), dÞch vô ®iÒu phèi vµ lµ trung gian trong c¸c lêi gäi ®èi t­îng ph©n t¸n tõ xa, dÞch vô b¶o mËt vµ an toµn trong c¸c truy xuÊt tµi nguyªn m¹ng. TÊt c¶ c¸c dÞch vô ®­îc tÝch hîp trong mét tæng thÓ thèng nhÊt sö dông còng nh­ ph©n bè tµi nguyªn mét c¸ch hîp lý. + T­¬ng ThÝch Víi PhÇn MÒm HiÖn Cã Vµ Gi¶m Chi PhÝ §Çu T­ MÆc dï cã thay ®æi lín trong hÖ ®iÒu hµnh vµ m«i tr­êng thùc thi nh­ng Windows vÉn chó träng ®Õn tÝnh t­¬ng thÝch víi c¸c phiªn b¶n cña COM,DCOM vµ ASP.Trong hÇu hÕt c¸c tr­êng hîp nh÷ng øng dông COM, DCOM, trang ASP, nh÷ng kÞch b¶n hoÆc file thùc thi ®Òu ho¹t ®éng tr¬n tru trong m«i tr­êng NGWSF míi. 2.2 Giíi thiÖu ASP.NET 2.2.1 Tại sao ta lại quan tâm và phát triển mạng với ASP.NET Ta phải công nhận một điều là .NET Framework và các ứng dụng của nó đã và đang tạo một cuộc cách mạng kỹ thuật trong công nghệ Tin Học (Information Technology), thay đổi tận gốc rễ các kiểu mẫu lập trình hay phát triển và triển khai mạng trên thế giới và do đó tạo một vận hội mới đáp ứng mọi yêu cầu khẩn thiết cho các ngành nghề kỹ thuật và thương mại hiện nay cũng như vạch một hướng đi vững chắc và dài lâu cho tương lai Tin Học. ASP.NET chính là một trong những ứng dụng quan trọng nhất để phát triển và triển khai mạng một cách dễ dàng chưa từng thấy từ xưa đến nay. Thật vậy, hãy lắng nghe thử chính Microsoft đã nói về ASP.NET như thế nào: “ASP.NET is a revolutionary programming framework that enables the rapid development of powerful web applications and services. Part of the Microsoft .NET Platform, it provides the easiest and most scalable way to develop, deploy and run distributed web applications that can target any browser or any application.” ( trÝch MSDN) Asp.NET h¬n h¼n phiªn b¶n tr­íc cña nã lµ Active Server Page(ASP); nã lµ mét ph¸t triÓn Web thèng nhÊt cung cÊp c¸c dÞch vô cÇn thiÕt cho c¸c nhµ ph¸t triÓn ®Ó x©y dùng c¸c øng dông ë møc kinh doanh (enterprise). ASP.NET cung cÊp mét sè l­îng lín c¸c có ph¸p t­¬ng thÝch víi ASP, mÆt kh¸c ASP.NET cßn cung cÊp mét kiÓu lËp tr×nh vµ mét c¬ së h¹ tÇng míi cho phÐp ta t¹o c¸c líp øng dông míi ®Çy søc m¹nh. Ta cã thÓ tù do thªm vµo c¸c chøc n¨ng cña ASP ®· tån t¹i. ASP.NET lµ mét m«i tr­êng biªn dÞch trªn nÒn .NET; Ta cã thÓ t¹o c¸c øng dông b»ng bÊt k× ng«n ng÷ nµo t­¬ng thÝch víi .NET, Visual Basic, C#, Jscript.NET thªm vµo ®ã toµn bé nÒn t¶ng .NET framework s½n sµng ®Ó sö dông cho bÊt k× mét øng dông Asp.NET nµo. C¸c nhµ ph¸t triÓn cã thÓ dÔ dµng tiÕp cËn ®Õn c¸c lîi Ých tõ c«ng nghÖ nµy bao gåm mét m«i tr­êng CLR ®­îc qu¶n lý, kiÓu an toµn, tÝnh thõa kÕ.. ASP.NET ®­îc thiÕt kÕ ®Ó lµm viÖc mét c¸ch liÒn mét khèi víi c¸c tr×nh biªn tËp HTML kiÓu WYSIWYG vµ c¸c c«ng cô lËp tr×nh kh¸c bao gåm bé Mircrosoft Visual Studio .NET kh«ng chØ lµm cho viÖc ph¸t triÓn Web dÔ dµng h¬n, nã cßn cung cÊp tÊt c¶ c¸c lîi Ých mµ nh÷ng c«ng cô nµy ®­a ra, bao gåm mét GUI mµ c¸c nhµ ph¸t triÓn cã thÓ dïng ®Ó kÐo th¶ c¸c server controls lªn trang Web vµ cung cÊp c¸c tiÖn Ých gì rèi vµ lÇn vÕt ®Çy ®ñ, chi tiÕt. 2.2.2 Tãm t¾t c¸c ®Æc ®iÓm chÝnh trong ASP.NET + M« h×nh lËp tr×nh ®¬n gi¶n: ASP.NET giúp ta phát triển và triển khai các ứng dụng về mạng trong một thời gian kỷ lục vì nó cung cấp cho ta một kiểu mẫu lập trình dễ dàng và gọn gàng nhất. Các trang ASP.NET có thể làm việc với mọi browsers hiện nay như Internet Explorer (IE), Netscape, Opera, AOL, ... mà không cần phải đổi l¹i các nguồn mã rất vất vả như trước. + Hç trî ®a ng«n ng÷: Không như ASP kiểu cổ điển chỉ giới hạn với VBScripts and JScripts, ASP.NET hỗ trợ trên 25 .NET ngôn ngữ lập trình (dĩ nhiên ngoài các ngôn ngữ mới thiết lập đã cài sẵn trong .NET framework như là VB.NET, C# và JScript.NET còn có MC++.NET, Smalltalk.NET, COBOL.NET, Eiffel.NET, Perl.NET, Component Pascal.NET, Mercury.NET, Oberon.NET, Python.NET, ..). + Hç trî nhiÒu c«ng cô Mặc dù ta có thể chỉ cần dùng tới Notepad để triển khai các trang ASP.NET nhưng Visual Studio.NET giúp năng suất triển khai mạng thêm phần hiệu quả ví ta có thể quan sát các dù ¸n của ta dễ dàng hơn khi phát họa (design) các thành phần của ASP.NET bằng hình ảnh với ASP.NET Web Forms hay Services theo phương pháp 'drag-drop-doubleclick' quen thuộc của nền Windows. Thêm nữa, lại còn hç trî ta trong việc phát hiện và loại bỏ những lỗi sai một cách rất thuận lợi trong khi phát triển các ứng dụng về mạng (support for debugging and deploying ASP.NET Web applications). + Thµnh phÇn ®iÒu khiÓn phÝa server ASP.NET cung cÊp mét vµi ®iÒu khiÓn phÝa server ®Ó ®¬n gi¶n ho¸ viÖc t¹o trang. C¸c thµnh phÇn ®iÒu khiÓn nµy gãi gän mét sè t¸c vô th«ng th­êng nh­ hiÓn thÞ lÞch, kiÓm tra d÷ liÖu nhËp (Validate). C¸c thµnh phÇn ®iÒu khiÓn nµy cho phÐp ta rµng buéc d÷ liÖu t­¬ng tù nh­ ta ®ang viÕt mét øng dông víi desktop thËt sù, xo¸ ®i ®­îc biªn giíi client/server. + Namespace vµ Class Framework phong phó: Nhờ nền tảng vững vàng và tài nguyên phong phú của .NET Framework với hơn 5000 classes bao gồm như XML, data access, file upload, regular expressions, transactions, message queuing, SMTP mail, ... Nên việc thiết kế các đặc tính trong một ứng dụng trở nên nhẹ nhàng và thoải mái hơn xưa rất nhiều. Namespace ®­îc sö dông nh­ lµ mét hÖ thèng tæ chøc - mét c¸ch ®Ó thÓ hiÖn c¸c thµnh phÇn (Component) ®­îc më réng cho c¸c ch­¬ng tr×nh vµ øng dông kh¸c. Namespace bao gåm c¶ Class. Namespace gièng nh­ c¸c th­ viÖn Class vµ cã thÓ lµm viÖc viÕt c¸c øng dông dÔ dµng h¬n. + T¨ng tèc ®é thùc hiÖn ASP.NET không những chạy nhanh hơn ASP cổ điển gấp 5 lần mà còn có thể duy trì kiểu mẫu cập nhật gọi là kiểu mẫu 'just hit save', nghĩa là ASP.NET tự động dò tìm mọi sự thay đổi và compile files khi cần thiết cũng như lưu trữ kết quả compile đó để cung ứng dịch vụ cho những yêu cầu tiếp theo sau, nhờ vậy ứng dụng của ta luôn luôn cập nhật hóa và chạy nhanh hơn rÊt nhiÒu. + Output caching: ASP.NET có khả năng lưu trữ một kết quả chung trong phân bộ memory của trang để gởi giải đáp cho cùng một yêu cầu từ nhiều khách hàng khác nhau và nhờ đó không những tiết kiệm được sự lÆp đi lÆp lại công tác thi hành của một trang web mà còn gia tăng hiệu xuất một cách ngoạn mục do giới hạn tối đa việc chất vấn các cơ sở dữ liệu (eliminating the need to query the database on every request) rất tốn nhiều thời gian. + .NET so s¸nh víi J2EE: Trong việc đối đầu với nhau về hiệu xuất (performance) và scalability với cùng một ứng dụng phát triển giữa Sun's Java Pet Store J2EE và ASP.NET thì ASP.NET không những nhanh vượt trội hơn J2EE đến 28 lần (khoảng 2700%), nguồn mã lại ít hơn nhiều (khoãng 1/4 nguồn mã của J2EE) mà còn dùng bộ xử lý (processor) chỉ khoãng 1/6 lần so với việc sử dụng processor của J2EE. + Khai triÓn dÔ dµng ASP.NET đơn giản hóa việc triển khai ứng dụng mạng, do đó biến việc triển khai toàn bộ ứng dụng trở nên dễ dàng và thuận lợi hơn hẳn trước kia vì bây giờ ta chỉ cần sao (với XCOPY) và lưu trữ ở Server chứ không cần phải chạy chương trình 'regsrv32' để đăng ký bất cứ thành phần nào cả, và thêm nữa, khi cần lưu trữ những yếu tố phụ cần thiết cho việc thiết lập hay bố trí các ứng dụng, ta chỉ cần lưu giữ nó vào trong một hồ sơ dưới dạng XML là đủ. + Truy xuÊt d÷ liÖu Tõ ASP.NET truy xuÊt d÷ liÖu lµ mét kü thuËt th­êng xuyªn sö dông ®Ó biÓu diÔn d÷ liÖu cho ng­êi dïng. Giê ®©y ASP.NET khiÕn cho viÖc lµm víi môc ®Ých nµy dÔ dµng h¬n bao giê hÕt h¬n n÷a nã cßn cung cÊp viÖc qu¶n lý d÷ liÖu trong c¬ së d÷ liÖu. + T¨ng kh¶ n¨ng b¶o mËt Trong ASP chØ cã duy nhÊt mét kiÓu x¸c thùc ®ã lµ ta sö dông kiÓu x¸c thùc cña Windows, trong khi ®ã ASP.NET cho phÐp nhiÒu lo¹i ®¨ng nhËp vµ x¸c thùc ng­êi dïng: Windows, Pasport vµ Forms. + Më réng Trong ASP.NET, tr¹ng th¸i sesion b©y giê ®­îc duy tr× trong mét qu¸ tr×nh xö lý riªng rÏ trªn mét m¸y riªng rÏ hay CSDL, cho phÐp c¸c sesion qua server. ®iÒu nµy cho phÐp ta thªm nhiÒu Web server khi muèn më réng øng dông. + DÔ dµng thiÕt lËp cÊu h×nh cho øng dông web C¸c thiÕt lËp cÊu h×nh cho mét øng dông ASP.NET ®­îc l­u trong mét file d¹ng XML ng­êi lËp tr×nh cã thÓ dÔ dµng ®äc vµ thay ®æi l¹i ®­îc. Mçi mét øng dông ®Òu cã mét file cÊu h×nh riªng vµ viÖc më réng c¸c scheme tuú thuéc vµo yªu cÇu cña ng­êi lËp tr×nh. C¸c file dll b©y giê kh«ng cÇn ph¶i ®¨ng ký, ta chØ cÇn ®Æt nã vµo trong th­ môc /bin cña øng dông + CËp nhËt vµ ch¹y tù ®éng. ASP.NET cho phép ta tự động cập nhật hóa (update) các thành phần đã compiled (compiled components) mà không cần phải khởi động lại (re-start) các Web Server. + DÔ dµng ph¸t triÓn c¸c thµnh phÇn cò: Ta không cần phải du nhập những ứng dụng được phát triển và triển khai bằng ASP cổ điển hiện có của ta vào ASP.NET vì ASP.NET có thể chạy song song với ASP ở cùng một Internet Information Server (IIS) trong nền Windows 2000 hay nền Windows XP. Các ứng dụng cũ vẫn tiếp tục chạy hết sức thoải mái với ASP.DLL trong khi ASP.NET engine sẽ xử lý các ứng dụng mới. Ngoài ra, ASP.NET còn cho phép ta dùng lại những thành phần thương mại hiện nay kiểu COM cổ điển trong các ứng dụng của nó. + XML Web Services: Dịch vụ míi về mạng với XML cũng cho phép ta truyền đạt (communicate) và chia xÎ (share) các dữ kiện (data) xuyên qua mạng Internet dễ dàng tới các SOAP client mà không hề phân biệt đối xö các hệ điều hành hay các ngôn ngữ lập trình khác nhau (regardless of OS or programming language). Nhờ đó, ta không cần phải học thêm hay đào sâu các kiến thức về Networking, XML hay SOAP, ... + Mobile Web Service Support: Thêm nữa, ASP.NET Mobile Controls còn giúp ta phát triển và triển khai mạng nhắm vào thị trường những cell phone hay PDA với gần hơn 80 Mobile Web Services đuợc cung cấp trong .NET framework. Ta chỉ cần lập trình cho ứng dụng của ta như thường lệ rồi phó mặc cho Mobile Controls đó tự động phát sinh ra những nguồn mã như WAP/WML, HTML hay iMode thích hợp với từng loại thiết bị (device) riêng biệt. M« h×nh ho¹t ®éng cña ASP.NET 2.3 Nh÷ng ®iÓm kh¸c biÖt cña ASP so víi ASP.NET Chóng ta ®· xem s¬ qua vÒ vai trß cña ASP.NET trong m«i tr­êng tÝch hîp víi hÖ ®iÒu hµnh. Chóng ta cÇn nh×n ASP.NET ë mét khÝa c¹nh kh¸c .ASP.NET khac g× so víi ASP vµ t¹i sao l¹i cã sù kh¸c biÖt nµy? NÕu ta ch¹y l¹i nh÷ng øng dông ASP cò trªn nÒn ASP.NET ta cã thÓ kh«ng nhËn ra ®­îc sù kh¸c biÖt gi÷a ASP vµ ASP.NET. MÆc dï vËy nÕu më tµi liÖu h­íng dÉn SDK cña ASP.NET vµ chän ®Ò môc “What’s new”ta sÏ thÊy Windows ®­a ra rÊt nhiÒu kh¸i niÖm míi thËm chÝ ta ch­a tõng thÊy tr­íc ®ã trong ASP. Chóng ta sÏ t×m hiÓu vÒ sù kh¸c biÖt quan träng gi÷a ASP.NET vµ ASP ngay trong phÇn nµy. Tr­íc hÕt, t¹i sao Microsoft l¹i quyÕt ®Þnh thay ®æi vµ t¹o mét phiªn b¶n kh¸c cña ASP vµ ASP.NET sÏ gióp ta nh­ thÕ nµo trong viÖc ph¸t triÓn c¸c øng dông Web t­¬ng lai ?. ASP ®· cho thÊy sù thµnh c«ng cña nã trong c¸c øng dông Web, vËy t¹i sao MS l¹i quyÕt ®Þnh thay ®æi c«ng nghÖ vµ cho ra ®êi ASP.NET lµ mét phiªn b¶n hoµn toµn míi so víi ASP. Cã 4 nguyªn nh©n chÝnh sau ®©y: * HiÖn t¹i,ASP chØ lµ mét ng«n ng÷ kÞch b¶n phi ®Þnh kiÓu (none-type) dùa trªn VBScript hoÆc Jscript. ASP kh«ng tËn dông ®­îc c¸c ng«n ng÷ r»ng buéc kiÓu m¹nh nh­ C++ hay Visual Basic. ASP.NET cho phÐp sö dông ng«n ng÷ trung lËp.Trang ASP.NET cã thÓ viÕt b»ng rÊt nhiÒu ng«n ng÷ nh­: VBScript, Jscript, Visual Basic,C++,C#,Perl…. * Mét bÊt tiÖn cña c¸c trang ASP ®ã lµ m· lÖnh giao diÖn (®Þnh d¹ng b»ng c¸c thµnh phÇn HTML) trén lÉn víi nhau. Khi ph¸t triÓn nh÷ng øng dông Web lín th­êng c¸c dù ¸n cÇn t¸ch ra lµm hai nhãm. Mét nhãm thiÕt kÕ giao diÖn(Web designer)vµ mét nhãm viÕt lÖnh lËp tr×nh (programmer). KÕt qu¶ cuèi cïng th­êng lµ sù trén lÉn gi÷a phÇn thiÕt kÕ giao diÖn vµ m· lÖnh ASP ®Ó t¹o ra mét file ch­¬ng tr×nh duy nhÊt. C¸c trang ASP cña øng dông do ®ã rÊt khã b¶o tr× khi ta muèn thªm vµo c¸c m· lËp tr×nh míi hay thay ®æi l¹i giao diÖn. ASP.NET cho phÐp t¸ch rêi gi÷a m· lËp tr×nh vµ néi dung tµi liÖu. * Trong phiªn b¶n ASP tr­íc, ta hÇu nh­ ph¶i viÕt m· ch­¬ng tr×nh ®Ó qu¶n lý mäi chuyÖn. Ta muèn qu¶n lý tr¹ng th¸i cña c¸c tr­êng nhËp liÖu trong FORM cÇn ph¶i viÕt m·. Muèn kiÓm tra tÝnh hîp lÖ cña d÷ liÖu (validate) do ng­êi dïng nhËp vµo, cÇn ph¶i viÕt m·. §Ó trang ASP t¨ng tèc b»ng c¸ch dïng vïng ®Öm cache, cÇn ph¶i viÕt m·. ASP.NET thùc sù lµ m« h×nh ®èi t­îng thµnh phÇn lo¹i bá rÊt nhiÒu c«ng ®o¹n viÕt m· mµ lËp tr×nh viªn Web th­êng ph¶i lµm.ASP.NET cung cÊp c¸c thµnh phÇn ®iÒu khiÓn ho¹t ®éng phÝa chÝnh chñ (server side control) ho¹t ®éng theo h­íng sö lý sù kiÖn (t­¬ng tù c¸c ®iÒu kiÓn ta sö dông trªn Form cña ch­¬ng tr×nh Visual Basic). Ta chØ cÇn khai b¸o thµnh phÇn ®iÒu kiÓn sö dông vµ trong hÇu hÕt c¸c tr­êng hîp, ta kh«ng cÇn._. ph¶i viÕt thªm m· lÖnh. Mäi viÖc kiÓm so¸t tr¹ng th¸i vµ t­¬ng t¸c víi thµnh phÇn ®iÒu kiÓn ®Òu ®­îc tr×nh chñ Web Server víi kiÕn tróc ASP.NET lo liÖu. * Ngµy nay, thÕ giíi ®· thay ®æi nhanh trãng víi c¸c thiÕt bÞ cÇm tay nh­ ®iÖn tho¹i di ®éng,may Palm, TV cã thÓ kÕt nèi víi Internet…Nh÷ng thiÕt bÞ míi nµy ®Òu chuÈn bÞ kh¶ n¨ng kÕt nèi víi Internet vµ m¸y chñ phôc vô Web. C«ng viÖc ph¶i xö lý trªn m¸y chñ rÊt nhiÒu. Ch¼ng h¹n ngoµi viÖc xö lý trang HTML ta cßn ph¶i cã kh¶ n¨ng t¹o c¸c trang WML phôc vô cho ®iÖn tho¹i di ®éng, xö lý vµ trao dæi d÷ liÖu XML… Nh÷ng c«ng viÖc nµy ta cã thÓ sö lý b»ng ASP nh÷ng cÇn ph¶i thªm c¸c th­ viÖn phôc vµ ®ßi hái qu¸ tr×nh viÕt m· rÊt c«ng phu. ASP.NET cã s½n c¸c dÞch vô nµy ®Ó ta sö dông. Bªn c¹nh ®ã, chóng ta cßn ph¶i cã kh¶ n¨ng x©y dùng c¸c ®èi t­îng ph©n t¸n cã thÓ triÖu gäi tõ xa vµ sö dông l¹i trªn nhiÒu hÖ ®iÒu hµnh kh¸c nhau. C¸c ®èi t­îng ph¶i dÔ thiÕt kÕ vµ cµi ®Æt khi ®­a vµo sö dông. ASP.NET cung cÊp kiÕn tróc h¹ tÇng ®Ó x©y dùng c¸c øng dông ph©n t¸n trªn Web theo giao thøc triÖu gäi SOAP (Simple Oject Access Protocol-giao thøc truy xuÊt ®èi t­îng gi¶n ®¬n), cho phÐp thùc hiÖn chuyÓn ®æi d÷ liÖu XML phôc vô cho m«i tr­êng th­¬ng m¹i ®iÖn tö B2B(Business to Business). ASP.NET cung cÊp ®Çy ®ñ mäi dÞch vô tõ b¶o mËt ®Õn cÊp ph¸t bé nhí, thu gom r¸c, theo dâi sù qu¸ t¶i cña c¸c thµnh phÇn ®èi t­îng, c©n b»ng t¶i (load balance) gi¶m thiÓu tèi ®a c¸c kÕt nèi tiªu tèn tµi nguyªn. §Ó ®¹t ®­îc nh÷ng môc tiªu nµy, ASP ®· thay ®æi toµn bé ®Ó trë thµnh m«i tr­êng lËp tr×nh míi. Visual Studio.NET (hay phiªn b¶n Visual Studio 7.0) cña Microsofl lµ c«ng cô tuyÖt vêi nhÊt ®Ó ta x©y dùng c¸c øng dông Web, ®Æc biÖt lµ ASP.NET. M«i tr­êng lËp tr×nh míi cña Microsofl trªn nÒn Windows kh«ng ph©n biÖt ng«n ng÷. ASP.NET cã thÓ viÕt b»ng bÊt kú ng«n ng÷ nµo cã trong Visual Studio .NET nh­ C#, VB, C++. Ta cã thÓ sö dông c¸c c«ng cô ph¸t triÓn øng dông kh¸c nh­ng ch¾c r»ng chóng sÏ kh«ng v­ît qua ®­îc c¸c c«ng cô ph¸t triÓn cña Microsofl. 2.3.1 ¦u ®iÓm lín nhÊt cña ASP.NET VÊn ®Ò th¸ch thøc lín nhÊt ®èi víi c¸c øng dông Web ngµy nay lµ sù t­¬ng thÝch trªn c¸c tr×nh duyÖt cïng víi ®é phøc t¹p cña trang tµi liÖu do øng dông t¹o ra. §Ó t¹o mét trang tµi liÖu Web hÊp dÉn tËn dông ®­îc nh÷ng tÝnh n¨ng míi nhÊt cña tr×nh duyÖt nh­ng ®ång thêi vÉn hiÓn thÞ ®óng ®¾n trªn c¸c tr×nh duyÖt cò qu¶ lµ ¸c méng ®èi víi lËp tr×nh viªn vµ c¸c nhµ thiÕt kÕ Web. Vµ sù viÖc cµng trë lªn tåi tÖ h¬n khi c¸c thiÕt bÞ cÇm tay nh­ ®iÖn tho¹i di ®éng vµ ®ßi hái nhu cÇu sö dung Internet. C¸c trang tµi liÖu thiÕt kÕ cho nh÷ng thiÕt bÞ nµy yªu cÇu ph¶i nhá gän vµ kh«ng thÓ sö dông c¸ch ®Þnh d¹ng cho tµi liÖu nh­ trªn c¸c trinh duyÖt hiÖn ®¹i Mét trong nh÷ng c¸ch gi¶i quyÕt vÊn ®Ò trªn ®ã lµ h­íng ®Õn trong m«i tr­êng cña øng dông, ®Ó thiÕt kÕ c¸c trang tµi liÖu kh¸c nhau.VÝ dô cã thÓ t¹o 100 trang HTML ®Ó hç trî cho c¸c tr×nh duyÖt trªn m¸y PC, 100 trang WML kh¸c hç trî cho kÕt nèi ®iÖn tho¹i di ®éng. Nãi chung chóng ta x©y dùng 2 site riªng biÖt ®Ó h­íng ®Õn hai môc ®Ých sö dông kh¸c nhau. §©y lµ c¸ch mµ c¸c øng dông Web hiÖn t¹i ®ang sö dông. Tuy nhiªn, mét lùa chän kh¸c lµ tr×nh chñ cã thÓ tuú vµo yªu cÇu cña tr×nh kh¸ch ®Ó lùa chän vµ sinh ra c¸c trang tµi liÖu phï hîp víi môc ®Ých sö dông mµ tr×nh kh¸ch ®ang cÇn. C¸ch nµy tuy linh ®éng nh­ng ®ßi hái ph¶i x©y dùng vµ viÕt m· lÖnh c«ng phu. MÆc dï vËy víi ASP.NET ta kh«ng cÇn ph¶i viÕt m· lÖnh, c¸c thµnh phÇn ®iÓu khiÓn ho¹t ®éng trÓn tr×nh chñ cã kh¶ n¨ng nhËn d¹ng vµ sinh m· tuú theo môc ®Ých vµ yªu cÇu sö dông cuèi cïng cña tr×nh kh¸ch. 2.4 ASP.NET Web form 2.4.1. giíi thiÖu vÒ ASP.NET Web form Web form lµ mét c«ng nghÖ lËp tr×nh trong ASP.NET cho phÐp ta t¹o ra c¸c trang web cã thÓ lËp tr×nh ®­îc. Chóng biÓu diÔn th«ng tin b»ng viÖc sö dông bÊt kú ng«n ng÷ ®¸nh dÊu nµo vµ sö dông c¸c m· lÖnh phÝa server ®Ó thùc hiÖn c¸c thµnh phÇn phÝa server.Web form: . Cã thÓ ch¹y trªn bÊt cø browser nµo vµ tù ®éng dÞch mét c¸ch chÝnh x¸c, browser – tu©n thñ theo m· HTML cho mét sè chøc n¨ng nh­ styles, layout.. . Cã thÓ lËp tr×nh b»ng bÊt cø ng«n ng÷ thùc thi (CLR) nµo, bao gåm Visual Basic, C# vµ Jscript .NET. . Do x©y dùng trªn CLR vµ ®­îc cung cÊp tÊt c¶ c¸c lîi Ých tõ c«ng nghÖ nµy, bao gåm mét m«i tr­êng thi hµnh ®­îc qu¶n lý, kiÓu an toµn, tÝnh thõa kÕ vµ sù biªn dÞch ®éng. . Hç trî c¸c c«ng cô biªn tËp kiÓu WYSIWYG vµ c¸c c«ng cô ph¸t triÓn RAD m¹nh mÏ nh­ Microsoft Visual Studio .NET, cho viÖc thiÕt kÕ vµ lËp tr×nh c¸c form. . Cung cÊp mét bé c«ng cô ®a n¨ng cho phÐp c¸c nhµ ph¸t triÓn gãi gän logic trang vµo trong c¸c thµnh phÇn cã thÓ sö dông l¹i vµ n¾m b¾t c¸c sù kiÖn trong trang mét c¸ch râ rµng. Cho phÐp ph©n c¸ch gi÷a m· vµ néi dung trong mét trang, lo¹i trõ c¸c m· “spaghetti-code” th­êng gÆp trong c¸c trang ASP. . Cung cÊp mét bé c¸c chøc n¨ng qu¶n lý tr¹ng th¸i ®Ó b¶o vÖ tr¹ng th¸i nh×n thÊy ®­îc trong trang gi÷a c¸c lÇn truy vÊn. . Cã thÓ më réng víi c¸c control mµ ng­êi dïng tù t¹o hay do c¸c nhµ cung cÊp thø ba. 2.4.2 C¸c thµnh phÇn cña Web form. Web form ph©n chia giao diÖn ng­êi dïng cña c¸c øng dông web thµnh hai phÇn: thµnh phÇn trùc quan vµ giao diÖn logic ng­êi dïng. NÕu tr­íc ®©y ta ®· tõng sö dông víi c¸c c«ng cô ph¸t triÓn nhanh nh­ Microsoft Visual Basic. Microsoft C++, ta sÏ nhËn thÊy sù kh¸c biÖt gi÷a c¸c thµnh phÇn cña form vµ phÇn m· lÖnh t­¬ng t¸c víi form. Giao diÖn ng­êi dïng cho c¸c trang Web Form bao gåm mét file chøa c¸c thµnh phÇn ®¸nh dÊu vµ c¸c thµnh phÇn Web form ®Æc biÖt. File nµy th­êng ®­îc hiÓu nh­ lµ “trang”.Trang nµy lµm viÖc nh­ lµ mét líp chøa v¨n b¶n vµ c¸c control mµ ta muèn hiÓn thÞ. Ta cã thÓ sö dông bÊt kú tr×nh biªn tËp HTML nµo cã thªm c¸c Web form server control ®Ó ®Æt lªn form. Trang lµ mét file cã phÇn më réng “.aspx”. Giao diÖn logic ng­êi dïng cho Web form bao gåm m· lÖnh mµ ta t¹o ®Ó t­¬ng t¸c víi form. Ta cã thÓ lùa chän logic lËp tr×nh ®­îc chøa bªn trong file .aspx, hoÆc trong mét file riªng biÖt ( th­êng ®­îc gäi lµ file m· Èn- code behind), ®­îc viÕt b»ng VB, C#. khi ta ch¹y form, file líp m· Èn sÏ ch¹y kÕt qu¶ ®­a ra trang mét c¸ch ®éng. ViÖc lËp tr×nh c¸c øng dông Web ®èi mÆt víi nhiÒu thö th¸ch n¶y sinh kh«ng gièng nh­ khi lËp víi c¸c øng dông client truyÒn thèng. Trong sè c¸c thö th¸ch nµy lµ: . Giao diÖn ng­êi dïng phong phó. Mét giao diÖn ng­êi dïng víi mét sè l­îng lín néi dung, mét c¸ch bµi trÝ phøc t¹p, sù t­¬ng t¸c ng­êi dïng ®Ñp m¾t cã thÓ g©y khã kh¨n vµ nhµm ch¸n khi t¹o vµ lËp tr×nh nÕu sö dông c¸c tiÖn Ých HTML. Vµ trë nªn ®Æc biÖt khã khi t¹o mét giao diÖn ng­êi dïng cho c¸c øng dông cã thÓ ch¹y trªn nhiÒu tr×nh duyÖt kh¸c nhau. .Sù ph©n chia gi÷a client vµ server. Trong mét øng dông web, client (Browser) vµ server lµ c¸c ch­¬ng tr×nh kh¸c nhau th­êng ch¹y trªn c¸c m¸y tÝnh kh¸c nhau (thËm chÝ hÖ ®iÒu hµnh kh¸c nhau). Do ®ã hai phÇn cña mét øng dông chia xÎ rÊt th«ng tin; chóng cã thÓ giao tiÕp, nh­ng th«ng th­êng chØ trao ®æi c¸c th«ng tin ®¬n gi¶n. . Sù thi hµnh phi tr¹ng th¸i. Khi mét Web server nhËn mét truy vÊn cho mét trang, nã t×m trang, xö lý chóng, göi nã tíi browser vµ sau ®ã kh«ng cßn l­u tr÷ th«ng tin g× vÒ trang ®ã. NÕu ng­êi dïng truy vÊn ®Õn cïng mét ®ã, server lÆp l¹i toµn qu¸ tr×nh xö lý tõ ®Çu, hay nãi mét c¸ch kh¸c c¸c server kh«ng nhí g× vÒ trang mµ chóng ®· xö lý. Do ®ã, nÕu mét øng dông cÇn duy tr× th«ng tin vÒ mét trang, viÖc nµy trë thµnh mét vÊn ®Ò ph¶i ®­îc xö lý trªn m· øng dông. . Kh«ng biÕt g× vÒ kh¶ n¨ng cña client. Trong mét sè tr­êng hîp c¸c øng dông web ®­îc tiÕp cËn bëi nhiÒu ng­êi dïng víi nhiÒu tr×nh duyÖt kh¸c nhau, lµm khã kh¨n khi h¬n khi t¹o ra mét øng dông mét c¸ch b×nh th­êng víi tÊt c¶ chóng. . Truy xuÊt d÷ liÖu. §äc vµ ghi vµo nguån d÷ liÖu trong c¸c øng dông web truyÒn thèng th­êng rÊt phøc t¹p vµ tËp trung nhiÒu c«ng søc. §èi mÆt víi c¸c thö th¸ch nµy mét øng dông web cÇn nhiÒu thêi gian vµ nç lùc. Web form lµ gi¶i ph¸p ®Ó gi¶i quyÕt c¸c vÊn ®Ò nµy. . §éc lËp víi mäi tr×nh duyÖt. T¹o m· râ rµng cho c¸c tr×nh duyÖt kh¸c nhau. Tuy nhiªn, nã vÉn cho phÐp cã ®­îc c¸c lîi Ých cña c¸c chøc n¨ng ®Æc biÖt trong tr×nh duyÖt mét c¸ch tù ®éng ®Ó c¶i thiÖn viÖc tr×nh bµy. . M« h×nh lËp tr×nh sù kiÖn. Web form mang ®Õn c¸c øng dông Web mét m« h×nh ®Ó viÕt c¸c ph­¬ng thøc cho c¸c sù kiÖn x¶y ra ë phÝa server cung nh­ ë client, chuyÓn giao nã tíi server, vµ viÖc gäi hander thÝch ®¸ng lµ hoµn toµn tù ®éng vµ trong suèt. KÕt qu¶ lµ cÊu tróc m· lÖnh thËt ®¬n gi¶n vµ râ rµng. . M« h×nh ®èi t­îng nhÊt qu¸n, trõu t­îng, trùc quan. Bé khung web form ®­a ra mét m« h×nh ®èi t­îng cho phÐp ta nghÜ ®Õn nh÷ng form nh­ lµ mét ®¬n vÞ, kh«ng lµ c¸c phÇn riªng biÖt gi÷a client vµ server. Trong m« h×nh Web form ta cã thÓ lËp tr×nh mét c¸ch trùc quan h¬n c¸c øng dông web truyÒn thèng, bao gåm kh¶ n¨ng thiÕt lËp thuéc tÝnh cho c¸c thµnh phÇn cña form vµ ®¸p tr¶ c¸c sù kiÖn. Thªm vµo ®ã, Web Form control lµ mét c¸ch nh×n trõu t­îng vÒ néi dung vËt lý cña mét trang HTML vµ cña sù t­¬ng t¸c gi÷a browser víi server. Tãm l¹i, ta cã thÓ sö dông Web Form control theo kiÓu ta dïng nh­ c¸c control trong c¸c øng dông client th«ng th­êng vµ kh«ng ph¶i nghÜ vÒ viÖc sinh m· HTML®Ó hiÓn thÞ vµ xö lý c¸c control vµ néi dông cña chóng. . Qu¶n lý tr¹ng th¸i. Bé khung Web Form n¾m b¾t c¸c t¸c vô trong viÖc duy tr× tr¹ng th¸i cña form hay c¸c control trong nã mét c¸ch tù ®éng vµ cung cÊp nhiÒu c¸ch rã rµng ®Ó duy tr× th«ng tin øng dông ®Æc biÖt. . N©ng cÊp server. Bé khung Web Form cho phÐp ta n©ng cÊp øng dông tõ mét m¸y tÝnh víi bé xö lý ®¬n ®Õn mét tÇng m¸y tÝnh mµ kh«ng cÇn c¸c thay ®æi ph­c t¹p trong logic øng dông. 2.4.3 M« h×nh Web Form Mét Web Form bao gåm hai phÇn, c¸c thµnh phÇn nh×n thÊy ®­îc vµ m· lÖnh. C¸c thµnh phÇn cã thÓ ®­îc chøa trong cïng mét trang; Tuy nhiªn, ta cã thÓ c¸c thµnh phÇn nµy thµnh hai trang riªng biÖt. C¸c thµnh phÇn nh×nh thÊy ®­îc cã thÓ ®­îc t¹o trong c¸c file .aspx vµ ho¹t ®éng nh­ mét líp chøa c¸c thµnh phÇn HTML vµ c¸c control Web Form. M· lÖnh th× ®­îc chøa ë mét líp file riªng biÖt hay ngay trong file .aspx. Trong hÇu hÕt c¸c tr­êng hîp ta sÏ sö dông chóng theo c¸ch thø hai. 2.4.4 Bé khung Web Form lµ mét m« h×nh ®èi t­îng MÆc dï ta t¹o c¸c Web Form tõ c¸c thµnh phÇn riªng rÏ, chóng t¹o nªn mét khèi thèng nhÊt. Khi Web form ®­îc biªn dÞch, ASP .NET ph©n tÝch trang vµ m· cña chóng, t¹o ra mét líp míi, vµ sau ®ã biªn dÞch míi líp nµy. Líp t¹o ra ®­îc b¾t nguån tõ líp ASP.NET Page, nh­ng cã thªm c¸c thµnh phÇn më réng víi c¸c control, m· lÖnh, v¨n b¶n HTML tÜnh trong file .aspx. Líp trang míi nµy trë thµnh mét file cã thÓ thi hµnh vµ ®­îc thi hµnh ë phÝa server mçi khi trang Web Form ®­îc yªu cÇu. Trong khi thùc thi, líp Page xö lý c¸c yªu cÇu göi ®Õn vµ ph¶n håi b»ng c¸ch t¹o ra m· HTML mét c¸ch ®éng vµ göi nã tíi browser. NÕu trang cã chøa c¸c control (th«ng th­êng lµ nh­ vËy) th× líp Page ho¹t ®éng nh­ mét líp chøa c¸c control vµ ¸nh x¹ c¸c c¸c control ®­îc t¹o t¹i thêi ®iÓm thùc thi, còng nh­ vËy sinh ra c¸c m· HTML. §iÒu nµy hoµn toµn kh¸c víi ASP. Trong ASP, trang bao gåm m· HTML tÜnh ®Æt r¶i r¸c víi m· thùc thi. Bé xö lý cña ASP ®äc trang rót ra vµ ch¹y c¸c m· lÖnh (th«ng dÞch h¬n lµ biªn dÞch) sau ®ã ®Æt kÕt qu¶ trë l¹i m· HTML tÜnh tr­íc khi göi tíi tr×nh duyÖt. Tãm l¹i toµn bé Web form, theo hiÖu qu¶ nµo ®Êy, lµ mét ch­¬ng tr×nh ®­a ra m· HTML. M« h×nh xö lý gièng nh­ bÊt kú c¸c thµnh phÇn cã thÓ gäi nµo trong trang ®­îc thi hµnh khi cã triÖu gäi. Bëi v× file .aspx kh«ng ph¶i lµ c¸c module theo kiÓu truyÒn thèng, mèi quan hÖ cña nã víi file líp ®­îc thµnh lËp víi c¸c chØ thÞ ë ë ®Çu trang. §Æc biÖt lµ thuéc tÝnh thõa kÕ trong chØ thÞ @Page ®­îc sö dông ®Ó chØ ®Þnh líp file mµ file .aspx cã nguån gèc. 2.4.5 Qu¸ tr×nh xö lý cña trang Web form Bé khung Web form thùc hiÖn rÊt nhiÒu dÞch vô cho øng dông Web cña ta. vÝ dô bé khung Web Form cã thÓ n¾m b¾t c¸c th«ng tin cã liªn quan vµ lµ cho nã cã gi¸ trÞ trong thuéc tÝnh cña c¸c ®èi t­îng. §Ó lËp tr×nh Web Form mét c¸ch cã hiÖu qu¶ ta cÇn biÕt vÒ c¸c sù kiÖn tuÇn tù x¶y ra khi trang Web Form ®­îc xö lý. Vßng ®êi cña mét trang Web Form Round trip Mét trong nh÷ng ®iÒu quan träng ®Ó hiÓu ®­îc qu¸ tr×nh xö lý trong trang Web Form lµ vÒ sô ph©n chia ho¹t ®éng trong Web Form. Browser hiÓn thÞ Form tíi ng¬õi dïng vµ ng­êi dïng t­¬ng t¸c víi form. Tuy nhiªn tÊt c¶ qu¸ tr×nh xö lý mµ cã sù t­¬ng t¸c víi c¸c thµnh phÇn phÝa server ph¶i x¶y ra trªn server. §iÒu nµy cã nghÜa lµ form ph¶i ®­îc post lªn server, xö lý vµ tr¶ vÒ tr×nh duyÖt. Sù tuÇn tù nµy ®­îc gäi lµ round trip. MÆc dï ta cã thÓ t¹o m«t sè script h÷u Ých ë phÝa client trong trang Web Form nh­ ®Ó kiÓm tra d÷ liÖu nhËp vµo cho mét sè UI, nh­ng c¸c script nµy kh«ng thÓ t­¬ng t¸c víi c¸c thµnh phÇn ë phi¸ server. Trong Web form, hÇu hÕt c¸c hµnh ®éng cña ng­êi dïng nh­ lµ click mét button kÕt qu¶ tr¶ vÒ trong mét round trip. V× lý do nµy c¸c sù kiÖn cã s½n trong server control ®Òu cã giíi h¹n. HÇu hÕt c¸c server control chØ lé ra sù kiÖn click, chóng kh«ng ®­a ra c¸c sù kiÖn x¶y ra th­êng xuyªn nh­ mouseonover v× mçi lÇn sù kiÖn x¶y ra nã cÇn mét round trip ®Ó xö lý. Chóng kh«ng ®­a ra c¸c sù kiÖn x¶y ra th­êng xuyªn nh­ mouseonover, v× mçi lÇn sù kiÖn x¶y ra nã cÇn mét round trip kh¸c tíi server, nã chiÕm mét thêi gian ®¸ng kÓ. Sù t¹o l¹i trang Trong bÊt kú kiÓu xö lý Web nµo, c¸c trang ®­îc t¹o tõ ®Çu trong mçi round trip. Khi sevver kÕt thóc qu¸ tr×nh xö lý trang nã göi tíi browser vµ bá ®i c¸c th«ng tin vÒ trang ®ã. LÇn kÕ tiÕp khi trang ®­îc post lªn server, server b¾t ®Çu l¹i toµn bé trang vµ xö lý.V× vËy, Web pages th­êng ®­îc nãi lµ sù phi tr¹ng th¸i, gi¸ trÞ c¸c biÕn trong trang vµ control kh«ng ®­îc b¶o qu¶n trªn server. Trong c¸c øng dông truyÒn thèng, th«ng tin mµ server cã ®­îc lµ nh÷ng th«ng tin mµ ng­êi dïng ®iÒn vµo c¸c control, bëi v× th«ng tin ®­îc göi tíi server khi post c¸c form. C¸c th«ng tin kh¸c, nh­ gi¸ trÞ cña biÕn hay c¸c thuéc tÝnh thiÕt lËp ®Òu bÞ bá qua. Bé khung Web Form gi¶i quyÕt c¸c giíi h¹n nµy theo mét vµi c¸ch. ®Çu tiªn nã ghi l¹i trang th¸i vµ c¸c thuéc tÝnh cña control gi÷a c¸c round trip. Sau ®ã nã cung cÊp c¸c tiÖn Ých qu¶n lý tr¹ng th¸i ®Ó tr¶ l¹i c¸c th«ng tin cô thÓ trong øng dông (kh«ng chØ lµ gi¸ trÞ cña c¸c control) gi÷a c¸c round trip hay khi qua l¹i gi÷a c¸c trang. 2.4.6 C¸c chÆng trong qu¸ tr×nh xö lý Web Form Trong qu¸ tr×nh xö lý,Web form qua mçi sè chÆng kh¸c nhau.Mçi chÆng bé xö lý Web form gäi trang cã liªn quan xö lý c¸c ph­¬ng thøc vµ ch¹y m· lÖnh trong ph­¬ng thøc ®ã. Page_Init Sau sù kiÖn nµy , trang ®­îc khëi t¹o. Sù kiÖn nµy chÞu tr¸ch nhiÖm cho tÊt c¶ c¸c ho¹t ®éng khëi t¹o. NÕu ta muèn khëi t¹o c¸c gi¸ trÞ mét vµi biÕn .. tr­íc khi n¹p trang, ta khai b¸o nã trong sù kiÖn Page_Init. Page_load Sù kiªn tù ®éng ch¹y mçi khi trang ®­îc n¹p. nã x¶y ra tr­íc tiªn trong mét yªu cÇu trang sau khi c¸c control ®· ®­îc khëi t¹o. Change events Sau sù kiÖn Page_Load, lµ c¸c sù kiÖn cña c¸c control ®Æc biÖt. VÝ dô nh­ c¸c control cã sù kiÖn Change hay thËm chÝ sù kiÖn click. MÆc ®Þnh, chØ sù kiÖn click míi submit mét form lªn server. Sù kiÖn Change ®­îc l­u l¹i trong hµng ®îi chØ ®­îc xö lý sau khi form ®­îc post lªn server b»ng mét sù kiÖn click. Click event. T¹o ra viÖc post form lªn server ®­îc xö lý sau khi tÊt c¶ sù kiÖn Change ®· ®­îc xö lý. Page_Unload Lµ sù kiÖn cuèi cïng tr­íc khi trang bÞ huû bá, sù kÖn s¶y ra khi ng­êi dung yªu cÇu tíi mét trang kh¸c. Ta kh«ng thÓ ®äc c¸c gi¸ trÞ cña control trong ph­¬ng thøc cña sù kiÖn nµy v× c¸c control kh«ng cßn tån t¹i l©u n÷a. Page_Unload rÊt h÷u dông cho c¸c ho¹t ®éng lµm s¹ch nh­ ®ãng l¹i c¸c file, ®¨ng nhËp, ®ãng l¹i CSDL, vµ huû c¸c ®èi t­îng. 2.4.7 M« h×nh sù kiÖn cña Web Form Sù kiÖn trong Web Form th­êng kh¸c víi c¸c sù kiÖn trong form client truyÒn thèng hay c¸c øng dông web thuÇn client. Trong c¸c øng dông thuÇn client, c¸c sù kiÖn ph¸t sinh vµ ®­îc n¾m b¾t bëi clien. Trong Web Form hÇu hÕt c¸c sù kiÖn ph¸t sinh ë phÝa client vµ ®­îc n¾m b¾t ë phÝa server. Trong c¸c sù kiÖn ph¸t sinh ë phÝa client, m« h×nh sù kiÖn Web Form cÇn th«ng tin ®­îc n¾m b¾t ë phÝa client vµ th«ng ®iÖp vÒ sù kiÖn ®­îc chuyÓn tíi server. V× c¸ch lµm viÖc cña Web, th«ng ®iÖp nµy ph¶i ®­îc post qua HTTP. Bé khung Web Form ph¶i th«ng dÞch th«ng tin nµy ®Ó x¸c ®Þnh sù kiÖn nµo ®· ph¸t sinh, vµ sau ®ã gäi ph­¬ng thøc t­¬ng øng trong m· lÖnh ®Ó n¾m b¾t sù kiÖn. Sù kiÖn Postback vµ Non_Postback Trong c¸c control cña Asp (kh«ng ph¶i cña HTML) mÆc ®Þnh chØ sù kiÖn button_click() trong form x¶y ra th× post th«ng tin tíi server. Sù kiÖn change trong control cña ASP.NET ®­îc n¾m b¾t nh­ng kh«ng post ngay lËp tøc. Thay vµo ®ã chóng ®­îc cache cho tíi khi post x¶y ra. Sau khi trang ®­îc xö lý trªn server tÊt c¶ c¸c sù kiÖn ®­îc xö lý lÇn l­ît. Trong khi trang ®­îc xö lý trªn server, tÊt c¶ c¸c sù kiÖn change ®­îc xö lý tr­íc, sau ®ã sù kiÖn click g©y ra viÖc post form ®­îc thùc hiÖn. Ta cã thÓ ®Æt sù kiÖn change ®Ó cã thÓ post form ngay lËp tøc b»ng thuéc tÝnh Autopostback=”True” mµ kh«ng cÇn ®îi sù kiÖn click. Ph¶n håi sù kiÖn tíi c¶ Client vµ server trong HTML server control. C¸c server control trong ASP.NET chØ cung cÊp c¸c sù kiÖn ë phÝa client. Tuy nhiªn c¸c sù kiÖn trong bé HTML server control ( button vµ textbox) cho phÐp ta t¹o c¸c sù kiÖn cã thÓ ®­îc n¾m b¾t ë c¶ hai phÝa client vµ server. Gièng nh­ c¸c sù kiÖn trong control cña Asp.NET, sù kiÖn phÝa server cña c¸c control HTML th­êng bÞ giíi h¹n trong sù kiÖn ®¬n nh­ click hay change. C¸c sù cßn l¹i th­êng cho ta dïng trong client script. 2.4.8 C¸c sù kiÖn Application vµ Session Ngoµi c¸c sù kiÖn trong trang vµ c¸c sù kiÖn trong c¸c control, bé khung ASP.NET cßn cung cÊp c¸c sù kiÖn ë møc ®é cao h¬n: Application. Sù kiÖn ApplicationStart() x¶y ra khi øng dông Web cña ta lÇn ®Çu tiªn ®­îc b¾t ®Çu. §iÒu nµy cho phÐp ta khëi t¹o c¸c nguån tµi nguyªn ®­îc sö dông trong suèt thêi gian ho¹t ®éng cña øng dông. Mét sù kiÖn t­¬ng ®­¬ng víi nã, ApplicationEnd() h÷u Ých ®Ó ta ®ãng l¹i c¸c tµi nguyªn ®· sö dông. Session. C¸c sù kiÖn Session còng gièng nh­ Application (SessionStart vµ SesstionEnd) nh­ng ph¸t sinh víi mçi session duy nhÊt trong øng dông. (Mét session b¾t ®Çu khi mét ng­êi dïng yªu cÇu ®Õn mét trang lÇn ®Çu tiªn trong øng dông cña ta vµ kÕt thóc khi øng dông cña ta ®ãng phiªn kÕt nèi hay khi c¸c phiªn kÕt nèi hÕt thêi h¹n). §Ó t¹o ph­¬ng thøc sù kiÖn theo có ph¸p ASP.NET Trong c¸c thµnh phÇn server control, chØ cÇn g¾n mét ph­¬ng thøc cho tªn mét sù kiÖn: Sau ®ã t¹o ph­¬ng thøc ®Ó n¾m b¾t sù kiÖn ®ã trong m· lÖnh cña ta. Ph­¬ng thøc cã d¹ng nh­ sau: [Visual Basic] Private Sub methodname(ByVal sender As Object, ByVal e as EventArgs) VÝ dô: [C] protected void Button1_Click(object Source, EventArgs e){ Label1.Text="You clicked the button"; } <asp:Button id=Button1 runat="server" Text="Button1" onclick="Button1_Click" /> C¸c ®iÒu khiÓn phÝa Server Giíi thiÖu vÒ Server control. Khi t¹o mét Web Form, ta cã thÓ sö dông c¸c lo¹i ®iÒu khiÓn sau: HTML server control C¸c thµnh phÇn HTML ®­îc më réng cho phÝa server do ®ã ta cã thÓ lËp tr×nh víi chóng, HTML server control nµy thÊt sù lµ c¸c ®èi t­îng rÊt gÇn gòi víi c¸c thµnh phÇn HTML m· chóng ®aÞ diÖn. ASP.NET server control. C¸c control nµy cã nhiÒu c¸c chøc n¨ng néi t¹i h¬n HTML server control. ASP server contrl kh«ng chØ gåm c¸c lo¹i control trong form nh­ button textbox chóng cßn cã nh÷ng control cã môc ®Ých ®Æc niÖt nh­ Calendar.. Control kiÓm tra vµ nhËp d÷ liÖu. Control nµy lµ mét kiÓu logic chÆt chÏ cho phÐp ta kiÓm tra d÷ liÖu nhËp vµo. Ban cã thÓ g¾n nã víi mét control nhËp d÷ liÖu ®Ó kiÓm tra tÝnh hîp lÖ cña d÷ liÖu nhËp. User control. C¸c control mµ ta tù t¹o nh­ c¸c trang Web form. Ta cã thÓ nhóng c¸c user control trong c¸c trang Web Form kh¸c, thËt dÔ dµng ®Ó t¹o menu, thanh c«ng cô, hay c¸c thµnh phÇn cã thÓ sö dông l¹i kh¸c. Ta cã thÓ sö dông tÊt c¶ c¸c control nµy trong cïng mét form. 2.4.9 HTML server control HTML server control lµ c¸c thµnh phÇn HTML cã chøa c¸c thuéc tÝnh cã thÓ hiÓn thÞ vµ lËp tr×nh ®­îc trªn server. Theo mÆc ®Þnh c¸c thµnh phÇn HTML trong trang Web Form th­êng bÞ bá qua vµ ®­îc coi nh­ c¸c ®o¹n v¨n b¶n b×nh th­êng trªn server. Tuy nhiªn khi chuyÓn HTML sang HTML serverr control, ta cã thÓ më réng chóng nh­ lµ c¸c thµnh phÇn cã thÓ lËp tr×nh ®­îc trªn server. M« h×nh ®èi t­îng cña HTML server control gÇn gièng nh­ c¸c thµnh phÇn HTML mµ chóng ®¹i diÖn. VÝ dô c¸c ®Æc tr­ng cña HTML ®­îc më réng nh­ lµ c¸c thuéc tÝnh trong HTML server control. BÊt kú thµnh phÇn HTML nµo trong trang còng cã thÓ ®­îc chuyÓn thµnh HTML server control. Sù chuyÓn ®æi nµy lµ mét qu¸ tr×nh ®¬n gi¶n ta chØ cÇn thªm thuéc tÝnh RUNAT=SERVER th«ng b¸o nµy sÏ cho server biÕt cÇn ph¶i t¹o mét ®èi t­îng cho thµnh phÇn nµy khi xö lý. NÕu ta muèn tham chiÕu mét control trong m· lÖnh ta cÇn ph¶i g¸n thuéc tÝnh ID cho control ®ã. C¸c ®Æc diÓm cña HTML server control . Lµ mét m« h×nh ®èi t­îng mµ ta cã thÓ lËp tr×nh víi nã trªn server theo c«ng nghÖ lËp tr×nh h­íng ®èi t­îng. Mçi server control më réng c¸c thuéc tÝnh cho phÐp ta thao t¸c víi c¸c ®Æc tr­ng cña HTML theo kiÓu lËp tr×nh. . Mét bé c¸c sù kiÖn mµ ta cã thÓ viÕt c¸c ph­¬ng thøc theo c¸ch mµ ta th­êng lµm víi c¸c control trong Window form chØ kh¸c lµ c¸c sù kiÖn nµy ®­îc n¾m b¾t ë phÝa server. . Kh¶ n¨ng n¾m b¾t sù kiÖn ë phÝa client . Tù ®éng qu¶n lý trang th¸i cho c¸c gi¸ trÞ cña control trong form. NÕu cã mét round trip x¶y ra tíi server mµ gi¸ trÞ ng­êi dïng nhËp vµo trong HTML server control th× chóng ®­îc l­u l¹i mét c¸ch tù ®éng khi trang ®­îc göu trë l¹i tr×nh duyÖt. T­¬ng t¸c víi c¸c control kiÓm tra d÷ liªu nhËp (validation controls) do ®ã dÔ dµng buéc ng­êi dïng diÒn c¸c th«ng tin hîp lÖ vµo trong form. . Rµng buéc d÷ liÖu víi thuéc tÝnh trong c¸c control kh¸c . . Hç trî kiÓu HTML 4.0. 2.4.10 ASP.NET server control ASP.NET server control lµ bé control thø hai ®­îc thiÕt kÕ víi rÊt nhiÒu kh¸c biÖt. Chóng kh«ng thÓ hiÖn gièng hÖt nh­ c¸c HTML server control. Thay vµo ®ã chóng ®­îc ®Þnh nghÜa nh­ lµ c¸c control trõu t­îng mµ ®¹i diÖn cho c¸c thµnh phÇn HTML v× c¸c control nµy thËt sù kh¸c víi m« h×nh ®Ó lËp tr×nh. VÝ dô RadioButtonList trong ASP.NET lµ mét control nh­ng nã l¹i gåm c¸c table trong m· HTML. ASP.NET server control bao gåm c¸c control trong form truyÒn thèng nh­ button vµ textbox c¸c control phøc t¹p nh­ table. Chóng còng gåm cã c¸c control cung cÊp c¸c chøc n¨ng th­íng xuyªn sö dông nh­ lµ hiÓn thÞ d÷ liÖu trong l­íi, chän ngµy th¸ng.. VÝ dô sau miªu t¶ lµm thÕ nµo ®Ó ®­a vµo trong trang .aspx mét thµnh phÇn ®iÒu khiÓn: Declaring Server Controls This sample demonstrates how to declare the <asp:label> server control and manipulate its properties within a page. This is Message One This is Message Two This is Message Three vµ sù thÓ hiÖn cña nã trªn tr×nh duyÖt: Sau ®©y lµ c¸c ®Æc ®iÓm thªm vµo trong c¸c control ASP.NET: M« h×nh ®èi t­îng phong phó cung cÊp nhiÒu kh¶ n¨ng lËp tr×nh. Tù ®éng x¸c ®Þnh tr×nh duyÖt. C¸c control cã thÓ x¸c ®Þnh tr×nh duyÖt vµ t¹o m· t­¬ng øng cho tr×nh duyÖt ®ã. Mét sè control cã kh¶ n¨ng ®Þnh d¹ng theo c¸ch ta muèn thÓ hiÖn b»ng c¸ch sö dông templates. Mét sè control cã kh¶ n¨ng x¸c ®Þnh c¸c sù kiÖn vµ ngay lËp tøc post lªn server hoÆc lµ ®­îc cache vµ ph¸t sinh khi form ®­îc ®Ö tr×nh. Trong lóc thiÕt kÕ ë d¹ng HTML, c¸c control xuÊt hiÖn trong trang cã d¹ng: C¸c thuéc tÝnh trong tr­êng hîp nµy kh«ng gièng nh­ c¸c trong c¸c thµnh phÇn HTML, thay vµo ®ã chóng lµ c¸c thuéc tÝnh cña Web control. Khi trang Web form ch¹y, c¸c web server control trong trang th­êng ®­îc thÓ hiÖn nh­ c¸c thµnh phÇn HTML. VÝ dô mét textbox control th× gièng nh­ kiÓu thÎ hay . §Ó thªm c¸c Control vµo trang Web Form. ViÖc thªm c¸c server control vµo trang Web Form ®¬n gi¶n nh­ thªm c¸c thµnh phÇn HTML. Có ph¸p chÝnh x¸c mµ ta sö dông phô thuéc vµo control mµ ta thªm vµo, nh­ng th­êng thiÕt lËp theo c¸ch sau ®©y. C¸c control ph¶i cã thuéc tÝnh runat=”server”. §Æt thuéc tÝnh ID cho c¸c control trõ khi c¸c control ®ã lµ mét phÇn cña mét control phøc t¹p vµ sÏ ®­îc lÆp l¹i( nh­ c¸c control Repeater, DataList vµ DataGrid). Web server control ®­îc khai b¸o víi mét thÎ XML mµ tham chiÕu ®Õn asp namespace. C¸c thÎ ph¶i ®­îc ®ãng l¹i, ta cã thÓ sö dông thÎ ®ãng cô thÓ hay nÕu c¸c control kh«ng cã c¸c thµnh phÇn con ta cã thÓ dïng thÎ tù ®ãng. TiÕp ®Çu ng÷ asp: cho biÕt ®iÒu kgiÓn ®­îc t¹o ra tõ th­ viÖn lµ mét thµnh phÇn cña ASP.NET. Sö dông tiÕp ®Çu ng÷ lµm ph©n vïng tªn namespace cho phÐp ta t¹o ra nhiÒu phÇn tö hay thµnh phÇn ®iÒu khiÓn cïng tªn nh­ng ®­îc ®Æt trong c¸c th­ viÖn kh¸c nhau. ASP.NET cho phÐp c¸c nhµ ph¸t triÓn thø 3 cung cÊp th­ viÖn riªng cña hä, nh÷ng thµnh phÇn ®iÒu khiÓn thªm vµo sÏ ho¹t ®éng chung víi c¸c thµnh phÇn ®iÒu khiÓn ASP.NET s½n cã th«ng qua namespace riªng biÖt. ThËt sù lµ m« h×nh ®èi t­îng C¸c Web server control thËt sù lµ m« h×nh ®èi t­îng. Cã thÓ t­¬ng t¸c víi nã th«ng qua c¸c ph­¬ng thøc, thuéc tÝnh vµ sù kiÖn (t­¬ng tù m« h×nh h­íng ®èi t­îng trong Visual Basic ). C¸c thuéc tÝnh vµ ph­¬ng thøc Khi mét ®iÒu khiÓn trong ASP.NET ®­îc sö dông, ta hoµn toµn cã thÓ ®Æt thuéc tÝnh vµ triÖu gäi ph­¬ng thøc trong nã. C¸c sù kiÖn C¸c ®iÒu khiÓn cña ASP.NET cho phÐp ®¸p øng mét sè sù kiÖn ph¸t sinh tõ m¸y kh¸ch ngay trªn tr×nh chñ Sub button1_onclick (Object Sender, EventArgs E) §iÒu khiÓn server control néi t¹i C¸c server control néi t¹i thiÕt kÕ ®Ó thay thÕ cho c¸c ®iÒu khiÓn HTML. Lý do viÖc thay thÕ nµy lµ do tÝnh thuÇn nhÊt vµ t­¬ng thÝch. Mét trong nh÷ng vÊn ®Ò yÕu kÐm cña HTML ®ã lµ kh«ng thuÇn nhÊt vµ t­¬ng thÝch trong c¸ch ®Æt tªn cho c¸c thµnh phÇn c¸c chøc n¨ng t­¬ng tù nhau. VÝ dô: B»ng thÎ ta cã thÓ t¹o ra rÊt nhiÒu ®iÒu khiÓn kh¸c nhau “radio”, ”checkbox”, “button”,.. Chóng kh«ng râ rµng b»ng viÖc ®Þnh nghÜa c¸c ®iÒu khiÓn néi t¹i do ASP.NET cung cÊp. KÕt qu¶ cuèi cïng mµ ®iÒu khiÓn néi t¹i sinh ra ®Ó hiÓn thÞ trªn tr×nh duyÖt còng chØ lµ m· HTML ®¬n gi¶n. Giíi thiÖu mét sè Web Server Control Label Web Server control: cung cÊp cho ta c¸ch ®Ó ®­a mét ®o¹n text ra trang Web Form. Th­êng th× ta chØ nªn sö dông control nµy khi muè ®o¹n text ®ã cña ta thay ®æi trong lóc thùc thi. Sö dông label control th× ®¬n gi¶n h¬n viÖc dïng textbox hay c¸c control kh¸c, v× kÕt qu¶ cña nã lµ tÜnh trªn trang Web, ng­êi dïng kh«ng thÓ thay ®æi. Button: t­¬ng tù nh­ c¸c Submit trong HTML. Sö dông c¸c thµnh phÇn ®iÒu khiÓn nót nhÊn nµy khi ta muèn postback d÷ liÖu lªn tr×nh chñ. Linkbutton (nót liªn kÕt):cho phÐp ta thùc hiÖn mét sè thao t¸c tr­íc khi post lªn tr×nh chñ. Imagebutton: t­¬ng tù nh­ button nh­ng cho phÐp ta g¾n mét h×nh ¶nh vµo ®ã. Hyperlink chøc n¨ng nh­ thÎ trong HTML. §iÒu khiÓn textbox: thµnh phÇn nµy cho phÐp ta nhËp d÷ liÖu vµo tõ bµn phÝm kh¸ t­¬ng tù víi hép text trong Visual Basic. §iÒu khiÓn lùa chän checkbox: cho phÐp chän nhiÒu ®Ò môc cïng mét lóc. Radio button: Cho phÐp chän duy nhÊt mét ®Ò môc trong c¸c ®Ò môc ®­a ra. Litstbox: hiÓn thÞ danh s¸ch c¸c môc ®Ó lùa chän cho phÐp chän mçi lÇn mét ®Ò môc. Thuéc tÝnh Autopostback C¸c ®iÒu khiÓn trªn ®Òu cã mét thuéc tÝnh qu¶n lý tr¹ng th¸i lµ Autopostback. Th«ng th­êng d÷ liÖu vµ kÕt qu¶ t­¬ng t¸c cña ng­êi dïng chØ ®­îc göi lªn server xö lý sau khi ®· nhÊn nót submi. Tuy nhiªn, nÕu ta muèn thao t¸c postback thùc hiÖn ngay khi nót radio, checkbox hay danh s¸ch ®­îc chän ta cã thÓ ®Æt thuéc tÝnh autopostback cña mçi nót chän cã gi¸ trÞ lµ true víi chØ ®Þnh thñ tôc xö lý sù kiÖn trªn server. C¸c ®iÒu khiÓn ®a n¨ng (Rich control) §iÒu khiÓn Adrotator Chän ngÉu nhiªn c¸c th«ng tin qu¶ng c¸o ®­îc ®Þnh d¹ng s½n vµo trang tµi liÖu mçi khi hiÓn thÞ. §iÒu khiÓn lÞch Calendar Lµ ®iÒu khiÓn ®¬n gi¶n nh­ng mang l¹i nhiÒu t¸c dông. HiÓn thÞ lÞch vµo trang tµi liÖu theo c¸c kiÓu mµ ta ®Þnh mÉu. Ngoµi ra ng­êi dïng cã thÓ t­¬ng t¸c víi ®iÒu khiÓn lÞch nµy VÝ dô sau hiÓn thÞ mét calendar ®· ®­îc ®Þnh d¹ng l¹i mÉu. 2.4.11 C¸c ®iÒu khiÓn ®a n¨ng kh¸c HiÖn Microsoft ®ang x©y dùng mét tËp gåm rÊt nhiÒu ®iÒu khiÓn ®a n¨ng nh­ treeview, listview, Menu.. nh÷ng thµnh phÇn ®iÒu khiÓn nµy ho¹t ®éng t­¬ng tù nh­ trong m«i tr­êng ph¸t triÓn desktop. Thµnh phÇn ®iÒu khiÓn ®a n¨ng thËt sù ®em l¹icho c¸c nhµ ph¸t triÓn Web kh¶ n¨ng x©y dùng øng dông nhanh chãng vµ hiÖu qu¶. Lo¹i bá c«ng viÖc ph¶i x©y dùng lÆp ®i lÆp l¹i c¸c ®iÒu khiÓn th«ng dông. Web server control dïng ®Ó kiÓm tra d÷ liÖu nhËp vµo (validate control) Mét trong nh÷ng lîi Ých cña viÖc t¹o c¸c trang Web Form cho viÖc nhËp d÷ liÖu lµ cã thÓ kiÓm tra tÝnh hîp lÖ th«ng tin nhËp vµo cña ng­êi dïng. ASP.NET cung cÊp mét bé control ®Ó thùc hiÖn viÖc nµy, chóng rÊt dÔ sö dông cã thÓ kiÓm tra lçi nÕu cÇn thiÕt th«ng b¸o lçi. 2.4.12 Sö dông Validation Control §Ó kiÓm tra d÷ liÖu nhËp vµo cña ng­êi dïng, ta cÇn ph¶i thªm vµo trong trang Web Form c¸c validation control cho mçi control. Cã nhiÒu c¸c validation control cho mçi kiÓu kiÓm tra kh¸c nhau: Lo¹i kiÓm tra Control ®­îc sö dông ý nghÜa B¾t buéc ph¶i nhËp RequiredFieldValidator Ng­êi dïng kh«ng thÓ bá qua so s¸nh gi¸ trÞ CompareValidator So s¸nh gi¸ trÞ nhËp vµo víi mét h»ng sè, hay gi¸ trÞ cña c¸c control sö dông c¸c phÐp so s¸nh. KiÓm tra giíi h¹n RangeValidator KiÓm tra gi¸ trÞ nhËp vµo trong mét kho¶ng x¸c ®Þnh, giíi h¹n víi c¸c ch÷ sè,ch÷ c¸i.. Ng­êi dïng thiÕt lËp CustomValidator KiÓm tra b»ng c¸ch sö dông c¸c quy ®Þnh cña ta. Mçi input server control cã thÓ ®­îc g¾n víi nhiÒu Validator ®Ó thùc hiÖn nhiÒu t¸c vô. VÝ dô, ta cã thÓ g¾n vµo mét input ®Ó kiÓm tra ®iÒu kiÖn b¾t buéc ph¶i nhËp kÕt hîp víi kiÓm tra giíi h¹n nhËp vµo. Tuy nhiªn c¸c control kiÓm tra d÷ liÖu nhËp lµm viÖc giíi h¹n ®èi víi c¸c thµnh phÇn sau: Control Thuéc tÝnh kiÓm tra HtmlInputText Value HtmlTextArea Value HtmlSelect Value HtmlInputFile Value TextBox Text ListBox SelectedItem.Value DropDownList SelectedItem.Value RadioButtonList SelectedItem.Value 2.4.13 ASP.NET User Web control C¸c ®iÒu khiÓn trong ASP .NET ®· cung cÊp nhiÒu chøc n¨ng rÊt cã Ých, nh­ng chóng vÉn kh«ng thÓ ®¸p øng ®­îc hÕt c¸c yªu cÇu trong nhiÒu hoµn c¶nh kh¸c nhau. Web user contr._.ice) Dim parameterProductIMAGEURL As OleDbParameter = New OleDbParameter("iIMAGEURL", OleDbType.LongVarChar, ParameterDirection.Input) parameterProductIMAGEURL.Value = IMAGEURL myCommand.Parameters.Add(parameterProductIMAGEURL) Dim parameterProductDescription As OleDbParameter = New OleDbParameter("Description", OleDbType.LongVarChar, ParameterDirection.Input) parameterProductDescription.Value = DESCRIPTION myCommand.Parameters.Add(parameterProductDescription) Dim parameterQuality As OleDbParameter = New OleDbParameter("iQuality", OleDbType.Numeric, ParameterDirection.Input) parameterQuality.Value = QUALITY myCommand.Parameters.Add(parameterQuality) Dim parameterAmount As OleDbParameter = New OleDbParameter("iAmount", OleDbType.Numeric, ParameterDirection.Input) parameterAmount.Value = AMOUNT myCommand.Parameters.Add(parameterAmount) Dim parameterTotalview As OleDbParameter = New OleDbParameter("iTotalview", OleDbType.Numeric, ParameterDirection.Input) parameterTotalview.Value = TOTALVIEW Dim parameterDate As OleDbParameter = New OleDbParameter("iDate", OleDbType.Date, ParameterDirection.Input) parameterDate.Value = DATECREATED myCommand.Parameters.Add(parameterDate) myCommand.Parameters.Add(parameterTotalview) Dim parameterIsforsale As OleDbParameter = New OleDbParameter("iIsforsale", OleDbType.LongVarChar, ParameterDirection.Input) parameterIsforsale.Value = ISFORSALE myCommand.Parameters.Add(parameterIsforsale) ' Execute the command myConnection.Open() myCommand.ExecuteNonQuery() myConnection.Close() End Sub Public Sub AddNewCategory(ByVal CategoryName As String) Dim myConnection As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=scott;Password=tiger;Data Source=Test02;PLSQLRSet=1;Extended Properties=''") Dim myCommand As OleDbCommand = New OleDbCommand("{call packcategory.AddCat(?)}", myConnection) Dim parameterCategoryName As OleDbParameter = New OleDbParameter("CategoryName", OleDbType.LongVarChar, ParameterDirection.Input) parameterCategoryName.Value = CategoryName myCommand.Parameters.Add(parameterCategoryName) myConnection.Open() myCommand.ExecuteNonQuery() myConnection.Close() End Sub Public Sub Updateview(ByVal Productid As Integer) Dim myConnection As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=scott;Password=tiger;Data Source=Test02;PLSQLRSet=1;Extended Properties=''") Dim myCommand As OleDbCommand = New OleDbCommand("{call PackProduct.UpdateView(?)}", myConnection) Dim parameterView As OleDbParameter = New OleDbParameter("CategoryName", OleDbType.LongVarChar, ParameterDirection.Input) parameterView.Value = Productid myCommand.Parameters.Add(parameterView) myConnection.Open() myCommand.ExecuteNonQuery() myConnection.Close() End Sub End Class End Namespace C¸c ph­¬ng thøc cã trong ®èi t­îng nµy lµ lÊy c¸c th«ng tin vÒ category, subcategory, lÊy th«ng tin vÒ mÆt hµng theo category vµ subcategory, th«ng tin chi tiÕt vÒ mÆt hµng, thªm vµo thuéc tÝnh cña mÆt hµng sè l­ît ng­êi xem. §èi t­¬ng Customers Imports System Imports System.Web Imports System.Data Imports System.Data.OleDb Namespace Cybermarket Public Class Customers Public Sub AddUser(ByVal Username As String, ByVal Tel As String, ByVal address As String, ByVal emailadd As String, ByVal password As String) Dim myConnection As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=scott;Password=tiger;Data Source=test02;PLSQLRSet=1;Extended Properties=''") Dim myCommand As OleDbCommand = New OleDbCommand("{call PackUser.AddUser(?,?,?,?,?)}", myConnection) Dim parameterUserName As OleDbParameter = New OleDbParameter("UserName", OleDbType.LongVarChar, ParameterDirection.Input) parameterUserName.Value = Username myCommand.Parameters.Add(parameterUserName) Dim parameterUserTel As OleDbParameter = New OleDbParameter("Tel", OleDbType.LongVarChar, ParameterDirection.Input) parameterUserTel.Value = Tel myCommand.Parameters.Add(parameterUserTel) Dim parameterUseraddress As OleDbParameter = New OleDbParameter("Address", OleDbType.LongVarChar, ParameterDirection.Input) parameterUseraddress.Value = address myCommand.Parameters.Add(parameterUseraddress) Dim parameterEmailaddress As OleDbParameter = New OleDbParameter("Email", OleDbType.LongVarChar, ParameterDirection.Input) parameterEmailaddress.Value = emailadd myCommand.Parameters.Add(parameterEmailaddress) Dim parameterpassword As OleDbParameter = New OleDbParameter("Password", OleDbType.LongVarChar, ParameterDirection.Input) parameterpassword.Value = password myCommand.Parameters.Add(parameterpassword) myConnection.Open() myCommand.ExecuteNonQuery() myConnection.Close() End Sub Public Function CheckLogin(ByVal emailadd As String, ByVal password As String) As OleDbDataReader Dim myConnection As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=scott;Password=tiger;Data Source=test02;PLSQLRSet=1;Extended Properties=''") Dim myCommand As OleDbCommand = New OleDbCommand("{call PackUser.CheckLogin(?,?)}", myConnection) Dim parameterEmailaddress As OleDbParameter = New OleDbParameter("iEmailadd", OleDbType.LongVarChar, ParameterDirection.Input) parameterEmailaddress.Value = emailadd myCommand.Parameters.Add(parameterEmailaddress) Dim parameterpassword As OleDbParameter = New OleDbParameter("iPassword", OleDbType.LongVarChar, ParameterDirection.Input) parameterpassword.Value = password myCommand.Parameters.Add(parameterpassword) myConnection.Open() Dim result As OleDbDataReader result = myCommand.ExecuteReader() Return result myConnection.Close() End Function Public Function checkEmail(ByVal emailadd As String) As Boolean Dim myConnection As OleDbConnection = New OleDbConnection("Provider=MSDAORA.1;Password=tiger;User ID=scott;Data Source=test02") Dim myCommand As OleDbCommand = New OleDbCommand("{call PACKUSER.CHECKEMAIL(?)}", myConnection) Dim parameterEmailaddress As OleDbParameter = New OleDbParameter("IEmailadd", OleDbType.VarChar, 50, ParameterDirection.Input) parameterEmailaddress.Value = emailadd myCommand.Parameters.Add(parameterEmailaddress) myConnection.Open() Dim result As OleDbDataReader result = myCommand.ExecuteReader() If result.Read Then Return True Else Return False End If myConnection.Close() End Function Public Function GetUserdetails(ByVal UserID As Integer) As OleDbDataReader ' Create Instance of Connection and Command Object Dim myConnection As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=scott;Password=tiger;Data Source=Test02;PLSQLRSet=1;Extended Properties=''") Dim myCommand As OleDbCommand = New OleDbCommand("{call packuser.GetUserDetails(?)}", myConnection) ' Mark the Command as a SPROC ' myCommand.CommandType = CommandType.StoredProcedure ' Add Parameters to SPROC Dim parameterUser As OleDbParameter = New OleDbParameter("iuserid", OleDbType.Numeric, 10) parameterUser.Value = UserID myCommand.Parameters.Add(parameterUser) ' Execute the command myConnection.Open() Dim result As OleDbDataReader result = myCommand.ExecuteReader() ' Return the datareader result Return result myConnection.Close() End Function End Class End Namespace §èi t­îng nµy cung cÊp c¸c ph­¬ng thøc ®Ó kiÓm tra qu¸ tr×nh ®¨ng nhËp cña ng­êi dïng, kiÓm ta tÝnh hîp lÖ cña ®Þa chØ Email khi ®¨ng ký míi, thªm mét kh¸ch hµng vµo c¬ së d÷ liÖu vµ lÊy th«ng tin chi tiÕt vÒ kh¸ch hµng ®ã. §èi t­îng Email Imports System.Web.Mail Imports System Imports System.Data Imports System.Data.OleDb Namespace Cybermarket Public Class Email Public Function Getmailtemplate(ByVal mailtype As Integer) As OleDbDataReader ' Create Instance of Connection and Command Object Dim myConnection As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=scott;Password=tiger;Data Source=Test02;PLSQLRSet=1;Extended Properties=''") Dim myCommand As OleDbCommand = New OleDbCommand("{call packmails.Getmailtype(?)}", myConnection) ' Mark the Command as a SPROC ' myCommand.CommandType = CommandType.StoredProcedure ' Add Parameters to SPROC Dim parametermailtype As OleDbParameter = New OleDbParameter("imailtype", OleDbType.Numeric, 10) parametermailtype.Value = mailtype myCommand.Parameters.Add(parametermailtype) ' Execute the command myConnection.Open() Dim result As OleDbDataReader result = myCommand.ExecuteReader() ' Return the datareader result Return result myConnection.Close() End Function Public Function sent(ByVal from As String, ByVal sender As String, ByVal mailto As String, ByVal RCPT As String, ByVal subject As String, ByVal Body As String) As Boolean Dim msg As New MailMessage() msg.From = from msg.Subject = subject 'Formatmail(result("subject"), mailto, productmodel) msg.Body = Body 'Formatmail(result("body"), mailto, productmodel) msg.To = RCPT SmtpMail.SmtpServer = "localhost" Try SmtpMail.Send(msg) Catch Return False End Try Return True End Function Public Function Formatmail(ByVal msgtoformat As String, ByVal Username As String, ByVal Productmodel As String) As String msgtoformat = msgtoformat.Replace("", Username) msgtoformat = msgtoformat.Replace("", Productmodel) Return msgtoformat.ToString End Function Public Sub Addmail(ByVal productid As String, ByVal sender As String, ByVal RCPT As String, ByVal subject As String, ByVal body As String) Dim myConnection As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=scott;Password=tiger;Data Source=test02;PLSQLRSet=1;Extended Properties=''") Dim myCommand As OleDbCommand = New OleDbCommand("{call Packmails.Addmail(?,?,?,?,?)}", myConnection) Dim parameterproduct As OleDbParameter = New OleDbParameter("iproduct", OleDbType.Numeric, ParameterDirection.Input) parameterproduct.Value = productid myCommand.Parameters.Add(parameterproduct) Dim parametersender As OleDbParameter = New OleDbParameter("isender", OleDbType.LongVarChar, ParameterDirection.Input) parametersender.Value = sender myCommand.Parameters.Add(parametersender) Dim parameterRCPT As OleDbParameter = New OleDbParameter("iRCPT", OleDbType.LongVarChar, ParameterDirection.Input) parameterRCPT.Value = sender myCommand.Parameters.Add(parameterRCPT) Dim parametersubject As OleDbParameter = New OleDbParameter("isubject", OleDbType.LongVarChar, ParameterDirection.Input) parametersubject.Value = subject myCommand.Parameters.Add(parametersubject) Dim parameterbody As OleDbParameter = New OleDbParameter("ibody", OleDbType.LongVarChar, ParameterDirection.Input) parameterbody.Value = body myCommand.Parameters.Add(parameterbody) myConnection.Open() myCommand.ExecuteNonQuery() myConnection.Close() End Sub Public Function Getmailbyproduct(ByVal productid As Integer) As OleDbDataReader ' Create Instance of Connection and Command Object Dim myConnection As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=scott;Password=tiger;Data Source=Test02;PLSQLRSet=1;Extended Properties=''") Dim myCommand As OleDbCommand = New OleDbCommand("{call packmail.getmailbyproduct(?)}", myConnection) ' Mark the Command as a SPROC ' myCommand.CommandType = CommandType.StoredProcedure ' Add Parameters to SPROC Dim parameterProduct As OleDbParameter = New OleDbParameter("iuserid", OleDbType.Numeric, 10) parameterProduct.Value = productid myCommand.Parameters.Add(parameterProduct) ' Execute the command myConnection.Open() Dim result As OleDbDataReader result = myCommand.ExecuteReader() ' Return the datareader result Return result myConnection.Close() End Function Public Function Getmailbycustomer(ByVal Userid As Integer) As OleDbDataReader ' Create Instance of Connection and Command Object Dim myConnection As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=scott;Password=tiger;Data Source=Test02;PLSQLRSet=1;Extended Properties=''") Dim myCommand As OleDbCommand = New OleDbCommand("{call Packmail.Getmailbyuser(?)}", myConnection) ' Mark the Command as a SPROC ' myCommand.CommandType = CommandType.StoredProcedure ' Add Parameters to SPROC Dim parameterUser As OleDbParameter = New OleDbParameter("iuserid", OleDbType.Numeric, 10) parameterUser.Value = Userid myCommand.Parameters.Add(parameterUser) ' Execute the command myConnection.Open() Dim result As OleDbDataReader result = myCommand.ExecuteReader() ' Return the datareader result Return result myConnection.Close() End Function End Class End Namespace Cung cÊp c¸c ph­¬ng thøc dïng ®Ó thªm míi mét email khi cã mét kh¸ch hµng sö dông chøc n¨ng göi th­ trong Web site, lÊy c¸c email theo s¶n phÈm hay theo id cña kh¸ch hµng ®ã. Trong ®èi t­îng nµy cßn cã ph­¬ng thøc ®Ó ®Þnh d¹ng l¹i bøc th­ theo tõng chñ ®Ó cã trong b¶ng Emailtemplate cña CSDL vµ ph­¬ng thøc ®Ó göi ®i mét bøc th­. C¸c ®èi t­îng kh¸c §èi t­îng cmenu Trong øng dông cã sö dông mét menu ®Ó t¹o giao diÖn khi lùa chän c¸c category viÖc x©y dùng menu nµy ®Ó cã thÓ ®äc d÷ liÖu tõ nguån d÷ liÖu XML t­¬ng ®èi phøc t¹p vµ dµi dßng nªn kh«ng ®­îc tr×nh bµy ë ®©y. cmenu lµ ®èi t­îng ®· ®­îc biªn dÞch vµ ®Æt trong th­ môc /BIN cña øng dông. §èi t­îng menuDb Imports System Imports System.Text Imports System.Configuration Imports System.Data Imports System.Data.OleDb Imports Cyber_market.Cybermarket Namespace Cybermarket Public Class MenuDb Public Function CreatMenu() As StringBuilder Dim ProductCategory As ProductsDB = New Cybermarket.ProductsDB() Dim Categories As OleDbDataReader Categories = ProductCategory.GetProductCategories() Dim strXml As StringBuilder = New StringBuilder() strXml.Append(" ") strXml.Append("") strXml.Append("") 'Dim i As string=0 Dim PRoductCatelo As Cybermarket.ProductsDB = New Cybermarket.ProductsDB() Dim ProductList As OleDbDataReader 'Dim categoryId As Integer While Categories.Read() strXml.Append("") strXml.Append("") ProductList = PRoductCatelo.GetsubCategoryProducts(Categories("CategoryID")) While ProductList.Read() strXml.Append("") End While strXml.Append("") strXml.Append("") End While strXml.Append("") strXml.Append("") Return strXml End Function End Class End Namespace Ph­¬ng thøc createmenu trong ®èi t­îng nµy chØ ®Ó t¹o mét chuçi d÷ liÖu XML ®Ó ®Þnh d¹ng menu cho ®èi t­îng cmenu. §èi t­îng uploadpro lµ ®èi t­¬ng thªm vµo ®Ó thùc hiÖn viÖc upload file ¶nh lªn server. 3.3.2 Cµi ®Æt trang ASP.NET Mét sè trang chÝnh trong øng dông Trang default Gåm cã phÇn tiªu ®Ò cña trang lµ mét web user control “_header.ascx” ®­îc d­a vµo trang b»ng chØ thÞ , phÇn menu hiÓn thÞ danh môc mÆt hµng còng lµ mét User control. PhÇn ®Þnh d¹ng nµy xuyªn suèt trong toµn bé Web site Default <td style="HEIGHT: 324px" vAlign=top width=120 colSpan=1 height=324 > <td vAlign=top align=middle width=335 height=336 rowSpan=2 style="HEIGHT: 336px"> <DIV style="DISPLAY: inline; WIDTH: 325px; HEIGHT: 55px" ms_positioning="FlowLayout">This is hottest Products in Week   <td vAlign=top align=middle width=120 colSpan=1 height=12 style="HEIGHT: 12px"> Type something <img height=19 src="file:///C:/CTK_CU~1.GIF" width=10 border=0 ><img style="HEIGHT: 19px" height=19 width=470 border=0 > M· Èn trong trang default thùc hiÖn viÖc request cookies ®Ó kiÓm tra xem ng­êi dïng ®ã cã save l¹i th«ng tin cña hä trªn tr×nh kh¸ch kh«ng. Trang login Imports System Imports System.Data Imports System.Data.OleDb Imports System.Web.Security Public Class Login Inherits System.Web.UI.Page Protected WithEvents CheckBox1 As System.Web.UI.WebControls.CheckBox Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox Protected WithEvents Button1 As System.Web.UI.WebControls.Button Protected WithEvents Label2 As System.Web.UI.WebControls.Label Protected WithEvents TextBox3 As System.Web.UI.WebControls.TextBox #Region " Web Form Designer Generated Code " 'This call is required by the Web Form Designer. Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Customer As Cybermarket.Customers = New Cybermarket.Customers() Dim drcustomer As OleDbDataReader drcustomer = Customer.CheckLogin(TextBox1.Text, TextBox2.Text) If Not drcustomer.Read Then Label2.Text = "Invalid Password" Else Label2.Text = "Login successful!" ' Store the user's fullname in a cookie for personalization purposes Response.Cookies("Cybermarket_customerid").Value = drcustomer("UserId").ToString() Response.Cookies("Cybermarket_fullname").Value = drcustomer("UserName").ToString() ' Make the cookie persistent only if the user selects "persistent" login checkbox If CheckBox1.Checked = True Then Response.Cookies("Cybermarket_customerid").Expires = DateTime.Now.AddMonths(1) Response.Cookies("Cybermarket_fullname").Expires = DateTime.Now.AddMonths(1) End If End If End Sub End Class KiÓm tra vµ ghi l¹i th«ng tin cña ng­êi dïng trong mçi lÇn ®¨ng nhËp Néi dung trang Productlist.aspx Trang nµy ®­îc goi tõ trang default.aspx qua c¸c link trong menu. Trang nµy ®­îc gäi víi mét hoÆc hai gi¸ trÞ g¸n vµo ®i¹ chØ URL, c¸c gi¸ trÞ nµy lµ category vµ subcategory. Ta sÏ lÊy c¸c th«ng tin nµy ®Ó hiÓn thÞ mÆt hµng theo chñng lo¹i. Imports System Imports System.Data Imports System.Data.OleDb Public Class ProductsList Inherits System.Web.UI.Page Protected WithEvents LinkButton1 As System.Web.UI.WebControls.LinkButton Protected WithEvents LinkButton2 As System.Web.UI.WebControls.LinkButton Protected WithEvents LinkButton3 As System.Web.UI.WebControls.LinkButton Protected WithEvents LinkButton4 As System.Web.UI.WebControls.LinkButton Protected WithEvents LinkButton5 As System.Web.UI.WebControls.LinkButton Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox Protected WithEvents Button1 As System.Web.UI.WebControls.Button Protected WithEvents Label2 As System.Web.UI.WebControls.Label Protected WithEvents MyList As System.Web.UI.WebControls.DataList Protected WithEvents Label1 As System.Web.UI.WebControls.Label Dim PageDS As PagedDataSource Dim seltab As String Dim i As Integer #Region " Web Form Designer Generated Code " 'This call is required by the Web Form Designer. Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub #End Region Private Sub pagestart(ByVal pageindex As Integer) ' i = CInt(Label1.Text) Dim ds As DataSet PageDS = New PagedDataSource() Dim dv As DataView If Request.Params("subCategoryId") Is Nothing Then seltab = Label2.Text Dim categoryId As Integer = CInt(Request.Params("CategoryID")) Dim productCatalogue As Cybermarket.ProductsDB = New Cybermarket.ProductsDB() If seltab = "For sale only" Then ds = productCatalogue.GetProductsbyCat(categoryId, "sale") Else If seltab = "Wanted" Then ds = productCatalogue.GetProductsbyCat(categoryId, "wanted") Else 'Get Products by Categories ds = productCatalogue.GetProductsbyCat(categoryId, "both") End If End If dv = ds.Tables("Products").DefaultView PageDS.DataSource = dv PageDS.AllowPaging = True PageDS.PageSize = 2 PageDS.CurrentPageIndex = pageindex MyList.DataSource = PageDS MyList.DataBind() Else Dim subcategoryId As Integer = CInt(Request.Params("SubCategoryID")) 'Get Products by subCategories Dim productsubCatalogue As Cybermarket.ProductsDB = New Cybermarket.ProductsDB() 'ds = productsubCatalogue.GetProductsbySubCat(subcategoryId, i, 2) 'MyList.DataSource = ds 'MyList.DataBind() End If End Sub Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here If Not Page.IsPostBack Then pagestart(0) End If End Sub Private Sub LinkButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton1.Click Label2.Text = "For sale only" Label1.Text = 0 pagestart(0) End Sub Private Sub LinkButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton3.Click Label2.Text = "Both" pagestart(0) End Sub Private Sub LinkButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton2.Click Label2.Text = "Wanted" pagestart(0) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Response.Redirect("search.aspx?query=" & TextBox1.Text) End Sub Private Sub LinkButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton4.Click Label1.Text = CInt(Label1.Text) + 1 pagestart(CInt(Label1.Text)) End Sub Private Sub LinkButton5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton5.Click Label1.Text = CInt(Label1.Text) - 1 pagestart(CInt(Label1.Text)) End Sub Private Sub MyList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Private Sub DataGrid1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub End Class Trang ProductList Trang nµy ®­îc yªu cÇu khi ng­êi dïng chän ¶nh cña mÆt hµng trong ProductList th«ng tin vÒ mÆt hµng ®­îc lÊy tõ URL khi gäi trang víi id cña mÆt hµng Imports System Imports System.Data Imports System.Data.OleDb Public Class Productdetails Inherits System.Web.UI.Page Protected WithEvents Image1 As System.Web.UI.WebControls.Image Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents Label2 As System.Web.UI.WebControls.Label Protected WithEvents Label3 As System.Web.UI.WebControls.Label Protected WithEvents Label4 As System.Web.UI.WebControls.Label Protected WithEvents Label5 As System.Web.UI.WebControls.Label Protected WithEvents Label6 As System.Web.UI.WebControls.Label Protected WithEvents Label7 As System.Web.UI.WebControls.Label Protected WithEvents Label8 As System.Web.UI.WebControls.Label Protected WithEvents HyperLink1 As System.Web.UI.WebControls.HyperLink Protected WithEvents Label10 As System.Web.UI.WebControls.Label Protected WithEvents Label9 As System.Web.UI.WebControls.Label #Region " Web Form Designer Generated Code " 'This call is required by the Web Form Designer. Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here Dim ProductId As Integer = CInt(Request.Params("ProductID")) Dim productdetail As Cybermarket.ProductsDB = New Cybermarket.ProductsDB() Dim dr As OleDbDataReader dr = productdetail.GetProductdetails(ProductId) dr.Read() Label1.Text += dr("ProductModel").ToString() Label2.Text += dr("Production").ToString() Label3.Text += dr("Country").ToString() Label4.Text += dr("Price").ToString() Label5.Text += dr("quality").ToString Label6.Text += dr("amount").ToString() Label7.Text += dr("totalview").ToString() Label8.Text += dr("datecreated").ToString() Label9.Text += dr("description").ToString() Dim userdetails As Cybermarket.Customers = New Cybermarket.Customers() Dim druser As OleDbDataReader druser = userdetails.GetUserdetails(CInt(dr("userid").ToString)) druser.Read() HyperLink1.Text = druser("Email").ToString Label10.Text = druser("UserName").ToString & vbCrLf & _ druser("Tel").ToString & vbCrLf & _ druser("Address").ToString Image1.ImageUrl = "Images\ProductImages\" & dr("ImageUrl").ToString dr.Close() productdetail.Updateview(ProductId) End Sub End Class Trang sendmail Imports System.Data Imports System.Data.OleDb Public Class sendmail Inherits System.Web.UI.Page Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox Protected WithEvents TextBox3 As System.Web.UI.WebControls.TextBox Protected WithEvents TextBox4 As System.Web.UI.WebControls.TextBox Protected WithEvents TextBox5 As System.Web.UI.WebControls.TextBox Protected WithEvents Button2 As System.Web.UI.WebControls.Button Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents Label2 As System.Web.UI.WebControls.Label Protected WithEvents search As System.Web.UI.HtmlControls.HtmlForm #Region " Web Form Designer Generated Code " 'This call is required by the Web Form Designer. Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here If Not Page.IsPostBack Then If Request.Params("productid") "" Then Dim ProductId As Integer = CInt(Request.Params("ProductID")) Dim UserId As Integer = CInt(Request.Params("UserID")) 'Ok! now get some information about product and user Dim Getinfouser As New Cybermarket.Customers() Dim dr As OleDbDataReader dr = Getinfouser.GetUserdetails(UserId) dr.Read() TextBox3.Text = dr("Email").ToString Dim drp As OleDbDataReader Dim Getinfopro As New Cybermarket.ProductsDB() drp = Getinfopro.GetProductdetails(ProductId) drp.Read() Label2.Text += " You can contact to " & dr("UserName") & vbCrLf & _ "at" & dr("Tel") & vbCrLf & dr("address") Dim drm As OleDbDataReader Dim Gettmp As New Cybermarket.Email() drm = Gettmp.Getmailtemplate(1) drm.Read() TextBox4.Text = Gettmp.Formatmail(drm("Subject").ToString, dr("UserName").ToString, drp("ProductModel").ToString) TextBox5.Text = Gettmp.Formatmail(drm("Body").ToString, dr("UserName").ToString, drp("ProductModel").ToString) dr.Close() drp.Close() drm.Close() End If End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sendmail As New Cybermarket.Email() Dim result As Boolean result = sendmail.sent(TextBox2.Text, "Hatung", TextBox3.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text) If result Then Label1.Text = "Successful" Else Label1.Text = "Fail" End If End Sub End Class Trªn ®©y chóng ta ®· xem qua mét c¸ch ng¾n gän néi dung cña vµ cïng mét phÇn cña m· nguån ë phÝa ng­êi dïng, cßn ®¬n thÓ ®Ó qu¶n trÞ m¹ng ch­a ®­îc thiÕt kÕ do thêi gian h¹n hÑp. PhÇn ®¬n thÓ qu¶n trÞ nµy sÏ cã néi dung nh­ sau: LiÖt kª toµn bé mÆt hµng cã trong b¶ng POST cho ng­êi qu¶n trÞ,söa ®æi hay xãa khi th«ng tin kh«ng hîp lÖ, hay chÌn thªm vµo b¶ng PRODUCTS ®Ó th«ng tin ®­îc ®­a ®Õn mäi ng­êi. LiÖt kª c¸c category ®Ó söa ®æi hay më réng chñng lo¹i mÆt hµng. Danh môc tµi liÖu tham kh¶o [1] Introduction to Microsoft ASP.NET. (Course Number: 2063C). [2] ASP 3.0 ASP.NET – Nhµ xuÊt b¶n gi¸o dôc. [3] Microsoft .NET Framework SDK Documentation. [4] Gi¸o tr×nh lý thuyÕt vµ thùc hµnh Oracle 8i. [5] PL/SQL Fundamental. KÕt luËn Víi sù ph¸t triÓn nhanh chãng cña Internet vµ th­¬ng m¹i ®iÖn tö nh­ hiÖn nay. ViÖc lùa ASP.NET ®­îc coi nh­ lµ gi¶i ph¸p h÷u hiÖu nhÊt. Víi ASP.NET thiÕt kÕ Web giê ®©y trë nªn dÔ dµng h¬n bao giê hÕt do ®­îc hç trî nhiÒu thµnh phÇn phong phó, cã kh¶ n¨ng v­ît qua mäi tr×nh duyÖt, thiÕt bÞ mµ ta kh«ng cÇn quan t©m ®Õn viÖc ®Þnh d¹ng c¸c trang tµi liÖu cho mçi tr×nh duyÖt, mçi thiÕt bÞ, ASP.NET kÕt thóc nh÷ng tranh luËn vÒ ng«n ng÷ lËp tr×nh khi hç trî trªn 25 ng«n ng÷ kh¸c nhau. Khi kÕt hîp víi ADO+ víi ASP.NET ta dÔ dµng triÓn khai ®­îc c¸c øng dông víi m« h×nh N-tier, t¹o ra ®­îc nguån d÷ liÖu kh«ng kÕt nèi tõ nhiÒu nguån d÷ liÖu kh¸c nhau H¬n n÷a, ASP.NET më ra nhiÒu c¬ héi cho c¸c nhµ ph¸t triÓn víi c¸c øng dông ph©n t¸n cung cÊp d÷ liÖu cho kh¸ch hµng th«ng qua Internet cho phÐp hä t¹o ra mét dßng phÇn mÒm míi víi d÷ liÖu XML. Em ®· cè g¾ng khi x©y dùng mét øng dông víi ASP.NET sö dông c¬ së d÷ liÖu Oracle, kÕt hîp hai c«ng cô søc m¹nh nhÊt trªn Internet. Nh­ng do thêi gian t×m hiÓu vÒ hai c«ng cô nµy qu¸ Ýt nªn ch­a ph¸t huy ®­îc nhiÒu lîi Ých do chóng ®em l¹i. Cuèi cïng, em xin c¶m ¬n TS. Cao Kim ¸nh lµ ng­êi trùc tiÕp h­íng dÉn em hoµn thµnh ®å ¸n nµy, anh TuÊn gi¸m ®èc Trung t©m vµ c¸c anh, chÞ ë phßng nghiªn cøu vµ ph¸t triÓn Trung t©m CNTT – Ng©n hµng c«ng th­¬ng ViÖt Nam (ITC-ICB) ®· khuyÕn khÝch vµ t¹o ®iÒu kiÖn thuËn lîi cho em hoµn thµnh ®å ¸n ®óng thêi h¹n. ._.

Các file đính kèm theo tài liệu này:

  • docDA2028.doc
Tài liệu liên quan