Professional Documents
Culture Documents
BG LapTrinhWeb
BG LapTrinhWeb
HCM
Bin son:
Website: http://www.hutech.edu.vn
MC LC
MC LC
MC LC .................................................................................................................... I HNG DN .............................................................................................................III BI 1. ASP.NET ........................................................................................................... 1 1.1 TNG QUAN ASP.NET ............................................................................................. 1 1.2 TNH NNG MI TRONG ASP.NET ............................................................................ 4 1.3 TO TRANG WEB VI VISIUAL STUDIO ..................................................................... 5 1.4 CC S KIN TRONG ASP.NET ................................................................................. 9 TM TT .................................................................................................................. 12 BI TP ................................................................................................................... 13 BI 2. CC LP S DNG TRONG ASP.NET ............................................................... 15 2.1 HTTP REQUEST ................................................................................................... 15 2.2 HTTP RESPONSE.................................................................................................. 20 2.3 HTTP SERVER ...................................................................................................... 21 2.4 SESSION V COOKIE ........................................................................................... 22 TM TT .................................................................................................................. 25 BI TP ................................................................................................................... 26 BI 3. TRUY CP D LIU ......................................................................................... 29 3.1 TNG QUAN ........................................................................................................ 29 3.2 TRUY CP D LIU ADO.NET ................................................................................. 31 3.3 TRUY CP D LIU XML ........................................................................................ 32 3.4 SQLDATASOURCE ................................................................................................ 33 3.5 TRUY CP D LIU LINQ ....................................................................................... 35 TM TT .................................................................................................................. 40 BI TP ................................................................................................................... 40 BI 4. LP TRNH GIAO DIN WEB VI JQUERY ....................................................... 42 4.1 JQUERY L G? .................................................................................................... 42 4.2 LP TRNH VI JQUERY ........................................................................................ 45 TM TT .................................................................................................................. 52 BI TP ................................................................................................................... 53 BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK ................................................... 54
II
MC LC
5.1 TNG QUAN ASP.NET MVC .....................................................................................54 5.2 XY DNG NG DNG VI ASP.NET MVC .................................................................58 5.3 NH TUYN URL ..................................................................................................61 TM TT ...................................................................................................................64 BI TP ....................................................................................................................65 BI 6. MODEL VIEW CONTROLLER ....................................................................... 66 6.1 TM HIU V CONTROLLER .....................................................................................66 6.2 TM HIU V VIEW ................................................................................................69 6.3 TM HIU V MODEL .............................................................................................71 6.4 CU TRC VIEWS\SHARE\SITE.MASTER ..................................................................74 TM TT ...................................................................................................................75 BI TP ....................................................................................................................76 BI 7. CP NHT D LIU VI MVC .......................................................................... 77 7.1 THM MI D LIU TRONG MVC .............................................................................77 7.2 SA I D LIU TRONG MVC ...............................................................................81 7.3 QUY TRNH KIM TRA TRONG NG DNG MVC..........................................................87 TM TT ...................................................................................................................92 BI TP ....................................................................................................................93 BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC ...................................... 94 8.1 AUTHENTICATION - XAC THC NGI DUNG ...........................................................94 8.2 CU HNH VIC XC THC NGI DNG ............................................................... 101 TM TT ................................................................................................................. 104 BI TP .................................................................................................................. 106 TI LIU THAM KHO ............................................................................................... 107
HNG DN
III
HNG DN
M T
-
MN HC
Mn hc trang b cc kin thc nhp mn v lp trnh web. Ni dung bao gm: Asp.net web form Http request POST/GET Http response Lp trnh vi Session/cookie Lp trnh c s d liu: ADO.NET, Linq Asp.net MVC Model View Controller Bo mt vi Asp.net Membership
NI DUNG MN HC
Bi 1. Gii thiu tng quan v ASP.NET. Bi 2. Cc lp th vin trong ASP.NET Bi 3. Truy cp d liu Bi 4. jQuery. Bi 5. Tng quan v ASP.NET MVC Framework.. Bi 6. Model View - Controller. Bi 7. Chnh sa d liu vi MVC. Bi 8. Bo mt vi ASP.NET Membership
IV
-
HNG DN
Mn Lp trnh web cn kin thc tin ca cc mn hc sau. Thit k web Lp trnh hng i tng Lp trnh C# trn windows
YU CU MN HC
Ngi hc vn dng c kin thc nn tng v lp trnh web c th thit k ci t cc ng dng web, nh qun l website, h qun tr ni dung, ng dng thng mi in t, cc dch v web. K nng lp trnh, v phn tch thit k ng dng thnh tho. Ngi hc cn i hc y , c cc ni dung s c hc trc khi n lp, lm cc bi tp v nh v m bo thi gian t hc nh.
PHNG PHP NH GI MN HC
Mn hc c nh gi gm hai thnh phn. Phn im qu trnh chim 30%, hnh thc v ni dung nh gi im qu trnh do ging quyt nh v cng b cho ngi hc u kha hc. Phn im cui kha chim 70%, hnh thc l n mn hc cui kha.
BI 1. ASP.NET
BI 1. ASP.NET
Hc xong bi ny ngi hc s nm c cc ni dung sau: Hiu c tng quan v cng ngh ASP.NET, Khi nim v ASP.NET. Bit c nhng tnh nng mi ca ASP.NET 3.5 so vi ASP.NET 2.0. Bit cch to website trong Visual Studio 2008.
BI 1. ASP.NET
n dch c ra m IL. iu c ngha l IL l ngn ng ca .NET v ch c CLR nhn bit c IL. 1.1.4 Tnh hng i tng ASP.NET l ngn ng lp trnh hng i tng s dng cc ngn ng .NET. N cung cp b cc i tng nh v thc s l mt tng lm vit trn nguyn l ca HTTP v HTML. M ngun ca chng ta khng c truy cp ton b cc i tng trong .NET Framework nhng c th khai thc tt c cc quy c ca mt mi trng OOP (Object Oriented Programming). Chng ta c to cc lp, giao din, k tha cc lp ... Chng ta c th kim sot c cc i tng trong chng trnh nh hin th d liu v cc s kin ca i tng. 1.1.5 Bin dch ASP.NET Mt ng dng ASP.NET lun lun c bin dch, n khng chy bng m ca C# hoc Visual Basic m khng c bin dch trc. Mt ng dng ASP.NET thc s c bin dch thng qua 2 giai on:
Giai on u tin nhng cc m (code) ta vit (C#, Visual Basic hoc ngn ng
.NET khc) c dch bi Microsoft Intermediate Language (MSIL). Giai on dch ny c dch t ng khi trang wed u tin yu cu. Chng ta c th thc hin dch trc. Cc tp tin c dch thnh m IL (Intermediate Language Code).
Giai on tip theo c dch trc khi trang Web c thc thi. Ti giai on
BI 1. ASP.NET
Hnh 1.1. Kin trc .Net Framework Kha cnh quan trng nht ca cng c ASP.NET l n chy trong mi trng thi gian thc (Runtime) ca CLR (Common Language Runtime). CLR l my o (virtual machine) trong Microsoft .NET, do c ngn ng trung gian IL nn khi pht trin ng dng trn .NET, chng ta khng b ph thuc vo thit b, c ngha l theo Microsoft ni th ng dng .NET c th chy trn bt k thit b no c .NET Framework. Tt c cc namespace, cc ng dng, cc lp trong b .NET Framework c gi tt l b qun l m. CLR cng cung cp cc dch v quan trng khc nh:
1.1.6 D dng trin khai v cu hnh Mi s ci t .NET Framework u cung cp cc lp nh nhau. trin khai ng dng ASP.NET chng ta ch cn sao chp cc tp tin vo th mc o trn my ch (server) v my ch ch cn c .NET Framework.
BI 1. ASP.NET
Vic cu hnh d dng n gin khng ph thuc vo IIS (Internet Information Services). Cu hnh trong ASP.NET c t trong tp tin web.config. Tp tin web.config c cng vi th mc cha trang web ca chng ta. Tp tin web.config khng bao gi b kha, chng ta c th truy cp bt k lc no, vic sa tp tin ny hon ton d dng v chng c lu di dng XML.
BI 1. ASP.NET
System.Data.Linq.dll: Cc ci t cho LINQ to SQL System.Xml.Linq.dll: Cc ci t cho LINQ to XML System.Data.DataSetExtensions.dll Cc hin thc cho LINQ n DataSet System.Web.Extensions.dll: Cc ci t for ASP.NET AJAX
1.2.4 ASP.NET MVC (Model View Control) Kin trc MVC l vic chia tt c mc ca mt ng dng ra lm ba thnh phn (component) khc nhau Model, View v Controller:
liu vo cc kho cha d liu. Tt c cc nghip v logic c thc thi Model. D liu vo t ngi dng s thng qua View c kim tra Model trc khi lu vo c s d liu. Vic truy xut, xc nhn, v lu d liu l mt phn ca Model.
View: View hin th cc thng tin cho ngi dng ca ng dng v c giao
nhim v cho vic nhn cc d liu vo t ngi dng, gi i cc yu cu n b iu khin, sau l nhn li cc phn hi t b iu khin v hin kt qu cho ngi dng. Cc trang HTML, JSP, cc th vin th v cc tp tin ngun l mt phn ca thnh phn View.
giao nhim v nhn cc yu cu t pha my khch. Mt yu cu c nhn t my khch c thc hin bi mt chc nng logic thch hp t thnh phn Model v sau sinh ra cc kt qu cho ngi dng v c thnh phn View hin th.
BI 1. ASP.NET
Hnh 1.2. To mi d n
Nu chn New Project xut hin hp hi thoi New Project (h1.3) Trong Project Type: o Visual Basic Web nu chn Visual Basic l ngn ng vit ng dng. o Visual C# Web nu chn C# l ngn ng vit ng dng.
Trong Templates chn ASP.NET Web Application,. Trong Name t tn cho Project, tn do ta t. Trong Location l th mc cha Project. o Nu chn New Web Site xut hin hp hi thoi New Project sau.
Trong Languge: o Visual Basic Web nu chn Visual Basic l ngn ng vit ng dng. o Visual C# Web nu chn C# l ngn ng vit ng dng.
Trong Templates chn ASP.NET Web Application. Trong Location chn tn v th mc cha Project.
BI 1. ASP.NET
BI 1. ASP.NET
V d ta to mt d n c tn l ViDu1, t ti a D, chn ngn ng chn l C# (h1.5) sau bm OK. Sau chng ta c tp tin Default.aspx
Hnh 1.5. ViDu1 project Trong v d u tin ny chng ta son mt on m sau trong Default.aspx:
<%@ Page Language=C# AutoEventWireup=true CodeFile=Default.aspx.cs Inherits=_Default %> <!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd> <html xmlns=http://www.w3.org/1999/xhtml> <head id=Head1 runat=server> <title></title> </head> <body> <form id=form1 runat=server> <div> <font face=verdana color=red size=20>Cho mng bn n vi ASP.NET
BI 1. ASP.NET
thc thi ng dng web ny di dng Debug, chng ta chn Deburg Start Debugging hoc bm phm F5.
1.4 CC S
thc hin c ng cc s kin trong qu trnh lp trnh vi ASP.Net, chng ta cn tm hiu bng ngha cc tp tin nh sau: Bng 1.1.Bng ngha cc tp tin TP TIN *.aspx MIU T Tp tin ny cha ton b giao din ngi dng, cc ty chn, cc on m ngun ng dng. y l mt trong nhng trang web u tin c bt u khi ngi s dng duyt web. *.cs web.config global.asax Tp tin ny cha cc m ngun ca C# Tp tin tin dng XML cha cu hnh cho ng dng ASP.NET. N bao gm cc cu hnh v an ninh, qun l trng thi, qun l b nh. Chng ta s dng tp tin ny khai bo cc bin ton cc v phn ng vi cc s kin ton cc. Trong :
Phn giao din ca ng dng nm trong cc tp tin .aspx v html. Tt c cc tp tin m ngun (C#, VB.NET hoc ngn ng .NET) s c bin dch
10
BI 1. ASP.NET
1.4.1 Chu k sng ca trang web trong ASP.NET (Page Life Cycle)
Hnh 1.6. Vng i ca trang ASP.NET Chu k sng c bt u khi trnh duyt yu cu mt trang web gi l Session. Chu k sng vn tip tc nu:
Session ang hot ng. Ngi s dng tng tc vi giao din web cho n khi kch hot mt s kin. D liu ca trang (View State) wed c gi v cho Server. Server nhn c View State v tr li yu cu t View State. Chu k sng kt thc khi:
1.4.2 Mt s s kin ca trang web Cc s kin x l trong vng i ca trang web c m t trong bng sau:
BI 1. ASP.NET
11
Bng 1.2 Bng s kin lin quan cc din tin ca trang web S KIN MIU T Kim tra thuc tnh IsPostBack khi ln u tin trang web ang c s l. To mi hoc to mi li cc Control ng (Dynamic Control). Thit lp trang ch (Master page), thuc tnh Theme. c v thit lp gi tr cho thuc tnh Profile. Init Lm ni (Raised) sau khi cc Control c khi ng v cc Skin c ng dng. Chng ta s dng s kin ny c hoc khi to cc thuc tnh ca Control. Load InitComplete Unload Error DataBinding S dng s kin ny thit lp thuc tnh cho Control, thit lp cc kt ni vi C s d liu. S dng s kin ny x l cc tc v c yu cu khi tt c cc khi to hon thnh. Trang c gii phng khi b nh Khi xy ra li trong trang. Server Control trn trang c gn vi ngun d liu
Pre Init
1.4.3 S kin ng dng Cc s kin x l trong vng i ca ng dng hay ca h thng c m t trong bng sau: Bng 1.3 Bng s kin ng dng S KIN MIU T Ngi dng u tin duyt trang web. Khi khng cn ngi dng no duyt trang web. Khi c li xy ra trong ng dng Khi ngi dng duyt mt trang web Khi ngi dng ng trnh duyt hoc Session kt thc (time out) V d sau m s ngi truy cp v s ngi online, trong ta cn chun b ni dung tp tin Global.asax nh sau:
12
BI 1. ASP.NET
<%@ Application Language=C# %> <%@ Import Namespace=System.IO %> <script RunAt=server> void Application_Start(object sender, EventArgs e) { if (!File.Exists(D:\\Dem.txt)) File.WriteAllText(D:\\Dem.txt, 0); Application[SNTruyCap] = int.Parse(File.ReadAllText(D:\\Dem.txt)); } void Application_End(object sender, EventArgs e) { } void Application_Error(object sender, EventArgs e) { } void Session_Start(object sender, EventArgs e) { if (Application[SNOnline] == null) Application[SNOnline] = 1; else Application[SNOnline] = (int)Application[SNOnline] + 1; Application[SNTruyCap] = (int)Application[SNTruyCap] + 1; File.WriteAllText(D:\\Dem.txt, Application[SNTruyCap].ToString()); } void Session_End(object sender, EventArgs e) { Application[SNOnline] = (int)Application[SNOnline] - 1; } </script>
TM TT
Chu k sng ca trang web trong ASP.NET: chu k sng c bt u khi trnh duyt yu cu mt trang web gi l Session. Chu k sng vn tip tc nu:
Session ang hot ng. Ngi s dng tng tc vi giao din web cho n khi kch hot mt s kin. D liu ca trang (View State) wed c gi v cho Server. Server nhn c View State v tr li yu cu t View State. Chu k sng kt thc khi:
BI 1. ASP.NET
13
Kin trc MVC l vic chia tt c mc ca mt ng dng ra lm ba thnh phn (component) khc nhau Model, View v Controller:
liu vo cc kho cha d liu. Tt c cc nghip v logic c thc thi Model. D liu vo t ngi dng s thng qua View c kim tra Model trc khi lu vo c s d liu. Vic truy xut, xc nhn, v lu d liu l mt phn ca Model.
View: View hin th cc thng tin cho ngi dng ca ng dng v c giao
nhim v cho vic nhn cc d liu vo t ngi dng, gi i cc yu cu n b iu khin, sau l nhn li cc phn hi t b iu khin v hin kt qu cho ngi dng. Cc trang HTML, JSP, cc th vin th v cc tp tin ngun l mt phn ca thnh phn View.
giao nhim v nhn cc yu cu t pha my khch. Mt yu cu c nhn t my khch c thc hin bi mt chc nng logic thch hp t thnh phn Model v sau sinh ra cc kt qu cho ngi dng v c thnh phn View hin th. ActionServlet, Action, ActionForm v struts-config.xml l cc phn ca Controller.
BI TP
Cu 1. Thao tc
Lm quen vi mi trng Microsoft Visual Studio Xy dng ng dng web n gin WebCalculator o To Project WebApplication o Thit k giao din WebForm
14
BI 1. ASP.NET
o Vit m lnh x l n gin o Chy, Debug v sa li chng trnh Cu 2. Mi trng Microsoft Visual Studio 2010 hoc mi hn
Mt s khi nim c s o Form o Controls o Properties (ID, Width, Height,) o Phng thc o S kin o Th tc Hm (Private, Protected, Public) o Th vin o Lu m ngun trong tp tin ring bit (Yes? No?)
Giao din mi trng o Start Page o Option Dialog (Line number,). o Toolbox Thm control/tab vo toolbox (Bm phi \ Add ) Ko th control vo Form
o Properties o Solution Explorer o Class View o Xem mn hnh design form: Shift-F7 o Chuyn i t Design sang Code v ngc li: F7 o Chy chng trnh: Ctrl-F5 (hoc F5 vi ch Debug)
15
Hnh 2.1. Ngi dng gi yu cu n server i tng Request nhn tt c gi tr m trnh duyt ca client gi n server thng qua HTTP Request. Request i din cho Client khi yu cu trang Web, Server s dng va Response va Request p ng yu cu hay i hi thng tin t Client.
16
RequestType: tr v phng thc truyn d liu t client n server gm 2 phng thc POST v GET C php: var valMethode=Request.RequestType;
2.1.2.2 TP HP FORM - FORM COLLECTION
Form collection c s dng tp hp d liu c cha trong cc phn t ca form chuyn t client n server bng phng thc POST.
<form method=Post action=CheckUser.aspx> UserName: <input type=text name=txtUser /><br /> Password: <input type=password name=txtPwd /><br /> <input type=Submit name=btnLogin value=Login /><br /> </form>
Hnh 2.2. Mn hnh giao din web Ti trang CheckUser.aspx, ta ly gi tr ca UserName v Password trn form: <b>UserName:</b> <%=Request.Form[txtUser]%><br />
17
<b>Password</b> <%=Request.Form[txtPwd]%>
V d ti trang Default.aspx:
using System; using System.Web.UI; namespace ViDu1 { public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { string varField, varName; int num = Request.Form.Count; for (int i = 0; i < num; i++) { varField = Request.Form.Keys[i]; varName = Request.Form[varField]; Response.WriteLine(string.Format(Key[{0}] = {1}, varField, varName)); } } } }
2.1.2.3 TP HP QUERYSTRING
Request.QueryString QueryString c dng ly d liu c gi t client n server bng phng thc GET hoc truyn d liu c cha tag lin kt <a> Hyperlink. QueryString c
18
nh ngha l chui nm sau du ? trong chui URL (Uniform Resource Locator) trn phn Address ca trnh duyt. C 3 cch truyn tham s v gi tp tin x l
Nu tham s khng c gi tr th gi tr tr v ca tham s khi s dng Request.QueryString l NULL. Vi ba cch truyn d liu t Client nu trn, pha Server s dng tp hp QueryString nhn d liu C php: Request.QueryString[varName]; Tp hp kha Keys
19
20
} } }
Thuc tnh Buffer: c 2 gi tr true v false quy nh cch truyn ti d liu: C php: Response.Buffer=true/false; o true: Hon tt cng vic v gi mt ln o false: Thc hin xong n u th gi n
tr v gi tr true/false
lp Httpcookies
End(): Kt thc tin trnh x l trn Server v y d liu ti Client Flush(): Kt thc tin trnh, quay li thc hin tip
21
Redirect(url) : dng chuyn client sang mt URL khc Redirect(url, Boolean): dng chuyn client sang mt URL khc, trong : o Nu Boolean=true th khi thc hin xong, lnh Response s thc hin tip o Nu Boolean =false th khi thc hin xong, lnh Response s dng
Cc thuc tnh: o MachineName: tn server o ScriptTimeout: thit lp thi gian x l ti a 1 tp tin V d: Server.ScriptTimeout=100s //thit lp thgian mc nh
HtmlEncode(str): dng m ho HTML thnh chui C php: Khi m ho chui HTML sang chui bnh thng nu gp cc k t nh
sau s chuyn sang k t tng ng: o K t < chuyn thnh < o K t > chuyn thnh > o K t & chuyn thnh & o Du nhy i chuyn thnh "
ASP khc
22
C php: Tham s path l ng dn ca tp tin ASP cn chuyn iu khin. Phng thc URLEncode: Tng t nh phng thc HTMLEncode, phng
thc URLEcode dng m ho URL thnh chui C php: Khi m ho chui URL sang chui bnh thng nu gp cc k t nh sau, s chuyn sang k t tng ng: o K t khong trng chuyn thnh du + o K t khng thuc k t ch v s s chuyn thnh s hexadecimal.
Cookie c lu tr trn trnh duyt, khi ngi dng s dng trnh duyt truy cp vo mt website no th server s gi cookie v trnh duyt v lu tr trc tip trn my ngi dng (client).
23
Cookie s khc nhau cho mi loi trnh duyt, IP ngi dng cng nh server ca website. Cookie c to ra bi website v gi ti browser, do vy 2 website khc nhau (cho d cng host trn 1 server) s c 2 cookie khc nhau gi ti trnh duyt . Mi trnh duyt s c cch qun l v lu tr cookie theo cch ring ca mnh, cho nn 2 trnh duyt cng truy cp vo 1 website s nhn c 2 cookie khc nhau. Trong ASP.NET cc phng thc, thuc tnh lin quan n vic x l Cookie c lu tr trong class HttpCookie. Cc thuc tnh thng dng trong Cookie:
Name: Tn Cookie. Domain: Tn min ca Cookie lu tr. Expires: Xc nh thi gian hiu lc ca Cookie. Value: Gi tr ca Cookie. HasKeys: Cho bit Cookie c tp gi tr con hay khng. Values: Tp cc gi tr ca Cookie. Mi ln c yu cu ln website, trnh duyt s gi cookie ln server, server s c
c ch c cookie v x l cho tc v no . Mi cookie c website gi n trnh duyt thng bao gm 3 thnh phn chnh sau:
a ch URL ca website m trnh duyt nhn cookie Thi gian tn ti ca Cookie Gi tr lu tr.
Ghi Cookie: C php: Respone.Cookies[cookie][key|attribute]=value; Trong , cookie l tn bin cookie, key l tham s m rng cho Cookie, attribute
24
Thao tc trn Cookie c nhiu Subkey Xa Cookie: Vic xa Cookie thc cht l thao tc chnh thi gian hiu lc v
Ta c th cha thc s dng cookie lu tr Shoping Cart. Mt cookie va qu nh v qu n gin. lm vic ngoi gii hn ca Cookie, ASP.NET Framework h tr mt chc nng mi c gi l Session State. Ging vi Cookie, Session lu tr d liu trong phm vi ring vi tng ngi s dng. Nhng khng ging vi Cookie, Session khng gii hn dung lng, nu ta cn lu tr hng Gigabyte d liu, hn th na Session c th a ra iu i tng phc tp hn l chui Text. Ta c th lu tr mt vi i tng trong Session. V d ta c th lu tr mt Dataset hay mt Shoping Cart trong Session.
2.4.3.2 SESSION TRONG ASP.NET
Trong ASP.NET cng nh cc cng ngh lp trnh web khc, Session c to ra khi Client bt u c yu cu gi ti Server v s kt thc khi Client c thao tc hy Session hoc sau mt thi gian (nh trc) khng c bt k thao tc no ln Server. Khi Session c to ng thi phng thc Session_OnStart() s c thc thi v tng t khi kt thc Session phng thc Session_OnEnd() s c thc thi.
2.4.3.3 MT S PHNG THC THAO TC TRN SESSION
Timeout: Qui nh khong thi gian (tnh bng pht) Web Server duy tr Session
nu ngi dng khng gi yu cu no v li Server. o Gi tr mc nh ca Timeout l 20. Nu khng c yu cu no k t ln yu cu cui cng sau mt khong thi gian l <Timeout> pht, i tng Session m Web server cp cho ln lm vic s t ng c gii phng.
25
o Nhng yu cu sau , webserver coi nh l mt ngi dng mi, v s cp mt i tng Session mi. V d: Thit lp thi gian cho 1 phin lm vic ca user l 100 pht Session.TimeOut = 100; C th thit lp thuc tnh ny trong tp tin Web.config
<system.web> <sessionState timeout=100 /> </system.web>
Count: tr v s session trong mt ng dng Abandon(): gii phng vng nh c dng duy tr i tng Session trn
Web Server ngay khi c gi thc hin. Nhng yu cu sau c Web server coi nh l mt ngi dng mi.
Remove(SessionName): xo d liu trn bin VarSession RemoveAll(): Xo d liu, nhng sessionID vn tn ti Cng c th dng Session lu cc bin gi tr nh Cookie Session[nameVar] = value;
TM TT
Bi hc ny gii thiu v cc i tng lm vic thng dng v quan trng trong k thut lp trnh web l Request, Response, Cookie v Session. Request l mt th hin ca lp HttpRequest, Browser dng Request object gi thng tin cn thit ti Server. i tng Request nhn tt c gi tr m trnh duyt ca client gi n server thng qua HTTP request. Http Response c s dng truyn d liu webserver n webBrowser
26
i tng Server cung cp cc phng thc gip chuyn iu khin gia cc trang vi nhau, ly thng tin v m li, encode, Cookie c lu tr trn trnh duyt, khi ngi dng s dng trnh duyt truy cp vo mt website no th server s gi cookie v trnh duyt v lu tr trc tip trn my ngi dng (client). Cookie s khc nhau cho mi loi trnh duyt, IP ngi dng cng nh server ca website. Cookie c to ra bi website v gi ti browser, do vy 2 website khc nhau (cho d cng host trn 1 server) s c 2 cookie khc nhau gi ti trnh duyt. Mi trnh duyt s c cch qun l v lu tr cookie theo cch ring ca mnh, cho nn 2 trnh duyt cng truy cp vo 1 website s nhn c 2 cookie khc nhau. Ging vi Cookie, Session lu tr d liu trong phm vi ring vi tng ngi s dng. Nhng khng ging vi Cookie, Session khng gii hn dung lng, nu ta cn lu tr hng Gigabyte d liu, hn th na Session c th a ra iu i tng phc tp hn l chui Text. Ta c th lu tr mt vi i tng trong Session. Session c to ra khi Client bt u c Requset gi ti Server v s kt thc khi Client c thao tc hy Session hoc sau mt thi gian (nh trc) khng c bt k thao tc no ln Server.
BI TP
Bi thc hnh ny ta s s dng Visual Studio thit k web vi cc trang nhp liu, truyn tham s gia cc trang v hin th thng tin chi tit, ta c th thc hin cc cng vic ny theo cc bc sau: To WebForm, t tn l DVDCatalog.aspx vi giao din thit k nh sau:
27
Trong ca s Solution Explorer, ta bm chut phi ln file DVDCatalog.aspx, chn View Code. Trong s kin Form_Load ta hy vit lnh sau:
28
Ta to mi mt Web Form v t tn l Bill.aspx. Trong ca s Solution Explorer, ta bm chut phi ln file Bill.aspx, chn View Code. Trong s kin Page_Load ta vit m lnh sau:
Trong ca s Solution Explorer, bm chut phi ln file DVDCatalog.aspx, chn View in Browser. Ta in y cc thng tin v bm nt Submit v xem kt qu.
BI 3. TRUY CP D LIU
29
BI 3. TRUY CP D LIU
Hc xong bi ny ngi hc s nm c cc ni dung sau: Khi nim v v ADO.NET, SqlDatasource, LinqDataSource, Linq v phng php lm vic ca tng i tng. Bit vn dng thnh tho nhng i tng ny trong bi lp trnh lin quan.
30
BI 3. TRUY CP D LIU
l DB_TEST.MDF trong folder App_Data. (h3.1, h3.2), ri S dng c s d liu DB_TEST to 2 table HangHoa v KhoHang.
Hnh 3.2. Thit k bng Sau , ta to mt chui kt ni (connection) trong tp tin cu hnh web.config v t tn l ConnectionString cho php truy nhp vo c s d liu. Ni dung tp tin web.config:
<?xml version=1.0 encoding=utf-8?> <!-For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration>
BI 3. TRUY CP D LIU
31
<configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name=entityFramework type=System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 requirePermission=false /> </configSections> <connectionStrings> <add name=DefaultConnection providerName=System.Data.SqlClient connectionString=Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-WebSite220131216190425;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\database1.mdf /> </connectionStrings> <system.web> <compilation debug=true targetFramework=4.5 /> <httpRuntime targetFramework=4.5 /> <authentication mode=Forms> <forms loginUrl=~/Account/Login timeout=2880 defaultUrl=~/ /> </authentication> </system.web> <entityFramework> <defaultConnectionFactory type=System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework > <parameters> <parameter value=v11.0 /> </parameters> </defaultConnectionFactory> </entityFramework> </configuration>
Connection: Thc hin kt ni ti ngun c s d liu; Command: Thc hin mt cu lnh SQL hoc mt store procedures;
32
BI 3. TRUY CP D LIU
o in d liu nhn c vo mt DataSet, o C th ghi nhn s thay i d liu trong DataSet. Mt v d s dng ADO.NET vi i tng hin th d liu l GridView. To mt webform t tn l Adonet.aspx, trong webform to mt GridView t tn l GridView1. M lnh thc hin kt ni d liu:
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[ConnectionString].ConnectionStr ing); SqlCommand sql = new SqlCommand(SELECT * FROM HangHoa, conn); DataSet ds = new DataSet(); SqlDataAdapter sda = new SqlDataAdapter(sql); sda.Fill(ds, HangHoa); DataTable dt = ds.Tables[HangHoa]; GridView1.DataSource = dt.DefaultView; GridView1.DataBind();
Kt qu chng trnh l:
BI 3. TRUY CP D LIU
33
V d s dng GridView hin th d liu trong mt tp tin XML. Ni dung tp tin Employee.xml:
<?xml version=1.0 encoding=utf-8 ?> <JobDataSet> <Employees> <Name>Nguyen Van A</Name> <Birthday>1988</Birthday> <Jobs>Student</Jobs> </Employees> <Employees> <Name>Do Nhu B</Name> <Birthday>1989</Birthday> <Jobs>Engineer</Jobs> </Employees> </JobDataSet>
Kt qu chng trnh l:
3.4 SQLDATASOURCE
SqlDataSource l mt thnh phn c gii thiu t .NET Framework 2.0. S dng SqlDataSource truy cp d liu s khng cn phi vit m lnh lp trnh, ch cn khai bo y cc thuc tnh cn. SqlDataSource ch nn dng khi khng cn s dng cc truy vn SQL qu phc tp thao tc vi c s d liu.
34
BI 3. TRUY CP D LIU
SqlDataSource l mt cch thc kt ni d liu dng ADO.NET provider: System.Data.SqlClient, System.Data.OracleClient, System.Data.OleDbClient, System.Data.OdbcClient. SqlDataSource cn c mt mt chui m t kt ni (connectionString) thng t trong web.config. Tip theo ca SqlDataSource l mt cu lnh SQL c th l mt cu lnh truy vn SELECT hoc cc cu lnh lin quan n thay i d liu nh: DELETE, INSERT, UPDATE.
Hnh 3.5. Kt hp d liu vi SqlDataSource La chn bng cn hin th d liu vo trong SqlDataSource (v d table KhoHang) sau thit lp GridView tr vo SqlDataSource va c to.
BI 3. TRUY CP D LIU
35
Hnh 3.7. Trang hin th danh sch kho hng trn trnh duyt
36
BI 3. TRUY CP D LIU
tng, LINQ to DataSet thc hin truy vn DataSet, LINQ to SQL thc hin truy vn n c s d liu SQL Server m khng phi vit m ngun, LINQ to XML c d liu t nh dng XML. 3.5.1 LINQ c bn Nu khng dng LINQ, nu cn ly tt c hng ha bt u bng B th ta c m ngun sau:
DanhMucHangHoa dm = new DanhMucHangHoa(); List<HangHoaChiTiet> dshh = dm.LayDanhMucHangHoa(); List<HangHoaChiTiet> dmhh = new List<HangHoaChiTiet>(); foreach (HangHoaChiTiet hh in dshh) { if (hh.HangHoa_TenHang.ToString().StartsWith(B)) { dmhh.Add(hh); } } Nu s dng LINQ trong m lp trnh: List<HangHoaChiTiet> dshh = dm.LayDanhMucHangHoa(); IEnumerable<HangHoaChiTiet> dmhh; dmhh = from hh in dshh where hh.HangHoa_TenHang.ToString().StartsWith(B) select hh; GridView1.DataSource = dshh; GridView1.DataBind();
3.5.2 Cch lm vic ca LINQ dng LINQ, ta cn to ra mt LINQ expression theo ng quy tc. Gi tr tr v ca LINQ expression l mt i tng iterator thc thi giao din IEnumerable<T> Khi enumerable c gn vo iterator th LINQ thc hin. 3.5.3 C php LINQ C php LINQ tng t nh mt c php ca SQL nhng c trt t khc vi SQL.
3.5.3.1 DNG FILTER V SORTING VI LINQ
BI 3. TRUY CP D LIU
37
select hh;
hoc:
IEnumerable<HangHoaChiTiet> dmhh = from hh in dshh orderby hh.HangHoa_TenHang select hh;
Hoc:
IEnumerable<HangHoaChiTiet> dmhh = hh.Select(hh => hh);
3.5.3.2 LINQDATASOURCE
LinqDataSource l mt iu khin c th thc hin nhiu tc v thm, sa, xa d liu mt cch t ng. Vi LinqDataSource, ta khng cn vit m ngun cho c vic cp nht, sa i d liu cng ging nh SqlDataSource.
38
BI 3. TRUY CP D LIU
Hnh 3.9. M hnh dbml Ta thit lp cu hnh cho control Linqdatasource1 nh sau: Chn
Linqdatasource1 Configure Data Source Chn LinqSqlDataContext, ri thc hin a d liu t LinqDataSource vo vo GridView:
BI 3. TRUY CP D LIU
39
40
BI 3. TRUY CP D LIU
TM TT
Lp ADO.NET Data Provider bao gm cc thnh phn: Connection: Thc hin connect ti ngun c s d liu; Command: Thc hin mt cu lnh SQL hoc mt store procedures; DataReader: Ch c v nhn d liu t mt truy vn; DataAdapter thc hin 2 nhim v: in d liu nhn c vo mt DataSet, c th ghi nhn s thay i d liu trong DataSet. LINQ cho php x l d liu t cc ngun khc nhau theo mt cch chung. LINQ to Objects thc hin truy vn cc i tng, LINQ to DataSet thc hin truy vn DataSet, LINQ to SQL thc hin truy vn n c s d liu SQL Server m khng phi vit m ngun, LINQ to XML c d liu t nh dng XML. T khi c cc control SqlDataSource, LinqDataSource th c cn thit dng cc i tng ca ADO.NET (Connection, Command, Adapter, ... ) truy cp d liu na khng? Cu tr li l vn cn thit v d cc i tng SqlDataSource, LinqDataSource rt linh hot v c th m ng hu ht cc chc nng nhng vn cha th cung cp cho nhu cu ngi dng nht l i vi nhng thao tc phc tp ln c s d liu. Khi cn thc hin ly d liu t mt table trong c s d liu s dng ADO.NET ri a vo i tng DataTable th cn cc b thnh phn no sau y: Connection, DataSet, Adapter.
BI TP
Trong bi thc hnh ny, ta s xy dng trang website qun l tin:
Cho php chn mt lnh vc t combo box v hin th danh sch tin thuc lnh
vc c chn.
Cho php sp xp danh sch tin theo ngy ng tin, tiu . Thao tc vi DataGrid: hin th d liu, phn trang, sp xp,
BI 3. TRUY CP D LIU
41
nm bt c cch thc kt ni CSDL. Xy dng c kin trc 3 tng. To cc class : LinhVucInfo, BanTinInfo, BanTinController , LinhVucController,
42
4.1 jQUERY L G?
4.1.1 Gii thiu jQuery l mt th vin kiu mi ca Javascript gip n gin ha cch vit JavaScript v tng tc x l cc s kin trn trang web. Cc th vin jQuery cung cp mt mc ch chung l s tru tng ho cc lp ph bin cho cc trang web scripting, do n hu ch trong hu ht cc tnh hung scripting. Cc chc nng jQuery bao gm:
Chn mt tag hoc mt tp hp cc tag trn trang web. Cung cp cc hm tin ch thng dng. Nhanh chng to ra cc tag mi. Quan trng nht l phn tch vic thit k v lp trnh web trn pha client. jQuery l mt th vin script, do ta c th thm vo trang web. Ta c th
download bn mi nht ca jQuery t http://docs.iquery.com/Downloading jQuery. T Visual Studio 2008 SP1 h tr y cc chc nng ca JavaScript Intellisense.
43
Mc ch chnh ca jquery-***-vsdoc.js l gip chng ta trong vic vit cc dng ch thch v h tr cho vic pht sinh m thng minh trong khi son tho jQuery.
Hnh 4.1. Website jQuery.com 4.1.2 S dng jQuery trong ASP.NET T Visual Studio 2010 tr i, jQuery c tch hp sn trong cc d n web, nh web form hay MVC.
44
Hnh 4.2. Cy th mc ca d n Trc khi vit cc cu lnh jQuery, ta ch cn khai bo s dng th vin jQuery nh sau:
<%@ Page Language=C# AutoEventWireup=true CodeFile=Default.aspx.cs Inherits=_Default %> <!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd> <html xmlns=http://www.w3.org/1999/xhtml> <head id=Head1 runat=server> <title>Vi du 9</title> <script src=jquery-1.3.2-vsdoc.js type=text/javascript></script> <script src=jquery-1.3.2.js type=text/javascript></script> </head> <body> <form id=form1 runat=server> <div> </div> </form> </body> </html>
45
M ny kim tra i tng document v i cho n khi n sn sng s dng theo chng ta mun. 4.2.2 Hm $() - function $() Khi chng ta lm vic vi CSS, Xpath hoc custom, jQuery s dng function $() (du $ v cp du ngoc). Di dy l mt s thnh phn trong $():
46
$(select).css(background-color, yellow);
Class : chn nhng i tng c lp css cho. V d chn nhng i tng c lp css l required:
$(.required).css(background-color, yellow);
qu xc nh selectors, s lng selectors l bt k, trt t ca cc phn t DOM trong i tng jQuery khng nht thit phi ng th t. V d:
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd> <html xmlns=http://www.w3.org/1999/xhtml> <head id=Head1 runat=server> <title>Vi du 9 1</title> <script src=/Scripts/jquery-1.8.2.js type=text/javascript></script> <script type=text/javascript language=javascript> $(document).ready(function () { $(#div1).css(color, red); $(#div3\\.1\\.\\[0\\]).css(color, red); $(div).css(width, 200px); $(div).css(height, 100px); $(.Class1).css(color, red); $(*).css(border, 1px solid blue); $(div,span).css(background-color, #EEEEEE); }); </script> <style type=text/css> div { float: left; padding: 5px;
47
margin: 5px; } .Class1 { } </style> </head> <body> <div id=div1 align=center>Visual Studio</div> <div id=div2 align=center>ASP.NET</div> <div id=div3.1.[0] align=center> <a href=http://docs.jquery.com/Downloading jQuery>Download jQuery </a></div> <br /> <span class=Class1>Cho mng bn n vi jQuery</span> </body> </html>
descendant (hu du nh con, chu, cht, ) ca cc phn t xc nh bi danh ngha ancestor. V d gn css cho nhng input nm trong cc form:
$(form input).css(border, 2px dotted blue);
parent > child : ly cc phn t con trc tip ca phn t cha cho trc. Tng
ng vi cc phn t con di danh ngha child ca phn t c xc nh vi danh ngha parent. V d gn css cho tt c phn t con ca i tng cha c id l main:
$(#main > *).css(border, 3px double red);
Ly phn t lin sau ca nhng i tng c chn theo c php: prev + next V d ly phn t lin sau l input ca nhng label:
V d:
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd> <html xmlns=http://www.w3.org/1999/xhtml> <head id=Head1 runat=server> <title>Vi du 9 1</title> <script src=jquery-1.3.2.js type=text/javascript></script>
48
<script type=text/javascript language=javascript> $(document).ready(function () { $(form input).css(border, 1px solid blue); $(#submit > *).css(border, 1px solid red); $(label + input).css(background-color, red); }); </script> <style type=text/css> body { font-size: 14px; } form { border: 2px green solid; padding: 2px; margin: 0; background: #efe; } div { color: red; } fieldset { margin: 1px; padding: 3px; } </style> </head> <body> <form id=form1 runat=server> <div id=main>Nhp thng tin c nhn </div><br /> H v tn:<input type=text size=50 /> <fieldset> <legend>Ni cng tc</legend> <label>Tn cng ty:</label> <input type=text size=50 /><br /> <label>a ch:</label> <input type=text size=100 /><br /> </fieldset><br /> H khu thng tr: <input type=text size=100 /><br /><br /> <div id=submit> <button>Cp nht</button> <button>Hy b</button> </div> </form> </body> </html>
49
$(tr:first).css(font-style, italic);
$(tr:last).css(background-color, yellow);
$(input:not(:checked)+span).css(background-color, yellow);
$(tr:even).css(background-color, #bbbbff);
$(tr:odd).css(background-color, #bbbbff);
V d: $(td:eq(2)).css(color, red);
50
<!DOCTYPE html PUBLIC -//W30//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd> <html xmlns=http://www.w3.org/1999/xhtml> <head id=Head1 runat=server> <title>Vi du 9 3</title> <script src=Scripts/jquery-1.8.2.js type=text/javascript></script> <script type=text/javascript> $(document).ready(function () { $(tr:first).css(font-style, italic); $(tr:last).css({ backgroundColor: 'yellow', fontWeight: 'bolder' }); $(tr:even).css(color, red); $(tr:odd).css(color, blue); $(tr:eq(4)).css(text-decoration, line-through); $(tr:gt(6)).css(font-size, 30px); $(tr:lt(3)).css(font-size, 25px); $(:header).css({ background: '#000', color: blue }); }); </script> </head> <body> <table style=border: 1px> <tr><td>Dng th 1</td></tr> <tr><td>Dng th 2</td></tr> <tr><td>Dng th 3</td></tr> <tr><td>Dng th 4</td></tr> <tr><td>Dng th 5</td></tr> <tr><td>Dng th 6</td></tr> <tr><td>Dng th 7</td></tr> <tr><td>Dng th 8</td></tr> <tr><td>Dng th 9</td></tr> </table> <h1>Tiu 1</h1> <p>Ni dung 1</p> <h2>Tiu 2</h2> <p>Ni dung 2</p> </body> </html>
Kt qu chng trnh
51
html Phng thc ny ch c cc element c thuc tnh inner html nh div, span, v.v
Ly ni dung html (innerHTML) ca phn t. html() Kiu tr v: String V d: Mi khi bm vo th p ly ni dung html ca th p v thng bo ni
dung ly c.
$(p).click(function() {alert($(this).html())});
Thit lp ni dung html (innerHTML) cho phn t. html( value ) Kiu tr v: jQuery V d: Thit lp ni dung html cho th div.
text
Ly ni dung text (innerText) ca phn t. text() Kiu tr v: String V d: Mi khi bm vo th p ly ni dung text ca th p v thng bo ni dung
ly c.
$(p).click(function() {alert($(this).html())});
Thit lp ni dung text (innerText) cho phn t. text( value ) Kiu tr v: jQuery V d: Thit lp ni dung text cho th div.
Val
Phng thc ny ch c cc phn t c thuc tnh value nh input, select val() Kiu tr v: String
52
V d: var $(#username).val() ;
Thit lp gi tr cho phn t. val( value ) V d: Thit lp ni dung text cho th input.
V d: $(input).val(hello world);
4.2.3.4 N HIN
n hidden.
V d: $(div:hidden).show(3000);
TM TT
Trong bi ny ta bt u lm quen vi jQuery. jQuery l mt th vin kiu mi ca Javascript gip n gin ha cch vit JavaScript v tng tc x l cc s kin trn trang web. Cc th vin jQuery cung cp mt mc ch chung l s tru tng ho cc lp ph bin cho cc trang web scripting, do n hu ch trong hu ht cc tnh hung scripting. Cc chc nng jQuery bao gm:
Chn mt tag hoc mt tp hp cc tag trn trang web. Cung cp cc hm tin ch thng dng. Nhanh chng to ra cc tag mi. Quan trng nht l phn tch vic thit k v lp trnh web trn pha client.
53
BI TP
Hy trnh by:
Cch s dng jQuery trong lp trnh ASP.Net truy xut d liu. Mt s v d tng qut v y vi cc ng dng t nhng hm API
54
55
Li ch ca vic dng phng php MVC l s phn on r rng gia models, views, controllers bn trong ng dng. Cu trc r rng ca m hnh MVC s gip cho vic kim tra li ng dng tr nn d dng hn. 5.1.2 c tnh trong ASP.NET MVC
Tch r rng cc mi lin quan, m kh nng test TDD (Test Driven Developer).
Ta c th kim th n v (test unit) trong ng dng m khng cn phi chy Controllers cng vi tin trnh ca ASP.NET v c th dng bt k mt unit testing framework no nh NUnit, MBUnit, MS Test, v.v...
th/ty bin. V d: ta c th la chn s dng engine view ring, routing policy, parameter serialization, v.v...
sch, cc URL khng cn cs phn m rng. V d ta c th nh x a ch /Products/Edit/4 thc hin hnh ng Edit ca lp iu khin ProductControllers hoc nh x a ch /Blog/SomeTopic thc hin hnh ng Display Topic ca lp iu khin BlogEngineController
v .Master, nh du cc tp tin ny nh mt view template. Ta c th d dng dng cc tnh nng ca ASP.NET nh lng cc trang Master, <%= %> snippets, m t server controls, template, data-binding, localization, v.v... . Tuy nhin chng s khng cn postback v interactive back server v thay vo l interactive end -user ti mt Controller class ( khng cn viewstate, page lifecycle )
forms/windows authenticate, URL authorization, membership/roles, output v data caching, session/profile state, configuration system, provider architecture v.v...
56
5.1.3 Khc bit vi Web Form ASP.NET WebForm s dng ViewState qun l, cc trang ASP.NET u c lifecycle, postback v dng cc web controls, cc s kin thc hin cc hnh ng cho UI khi c s tng tc vi ngi dng nn hu ht ASP.NET WebForm x l chm. ASP.NET MVC Framework chia ra thnh 3 phn: Models, Views, Controllers. Mi tng tc ca ngi dng vi Views s c thc hin hnh ng trong Controllers, khng cn postback, khng cn lifecycle khng cn s kin. Vic kim th (test), g li (debug) vi ASP.NET u phi chy tt c cc tin trnh ca ASP.NET v mi s thay i ID ca bt k iu khin no cng nh hng n ng dng. i vi ASP.NET MVC Framework th vic c th s dng cc unit test c th thm nh rt d dng cc Controller thc hin nh th no. Bng 5.1 Bng so snh tnh nng gia ASP.NET vi ASP.NET MVC Tnh nng Kin chng trnh C trnh Truy d liu Debug cp php S dng c php ca webform, tt cc s kin v iu khin do server qun l S dng hu ht cc cng ngh truy cp d liu trong ng dng Debug chng trnh phi thc hin tt c bao gm cc lp truy cp d liu, s hin th, iu khin cc iu khin Tc phn ti Tng tc Tc phn ti chm khi trong trang c qu nhiu cc iu khin v ViewState qu ln Tng tc vi javascript kh Phn ti nhanh hn do khng phi qun l ViewState qun l cc control trong trang Tng tc vi javascript d dng v chng trc ASP.NET Kin trc m hnh WebForm Business Database ASP.NET MVC Kin trc s dng vic phn chia chng trnh thnh Controllers, Models, Views Cc s kin c iu khin bi controllers, cc iu khin khng do server do server qun l Phn ln dng LINQ to SQL class to m hnh truy cp i tng Debug c th s dng cc unit test kim tra cc phng thc trong controller
57
ASP.NET khn v cc iu khin c iu khin bi server Cu trc a ch URL c dng <filename>.aspx?&<cc s> tham
ASP.NET MVC cc i tng khng do server qun l iu khin khng kh Cu trc a ch rnh mch theo dng Controllers/Action/Id
5.1.4 Li ch ca ng dng web da trn m hnh MVC ASP.NET MVC Framework mang li nhng li ch sau:
ch thng qua Controller. Nh ta c th thit k mt h tng qun l nh tuyn. c nhiu thng tin hn, ta nn xem phn Front Controller trn web site MSDN
H tr tt hn cho m hnh pht trin ng dng hng kim th (TDD) N h tr tt cho cc ng dng c xy dng bi nhng i c nhiu lp trnh
vin v thit k m vn qun l c tnh nng ca ng dng Cc tnh nng ca ASP.NET MVC Framework:
Tch bch cc tc v ca ng dng (logic nhp liu, business logic, v logic giao
din), d dng kim th v mc nh p dng hng pht trin TDD. Tt c cc tnh nng chnh ca m hnh MVC c ci t da trn interface v c kim th bng cch s dng cc i tng mocks (mock object) l cc i tng m phng cc tnh nng ca nhng i tng thc s trong ng dng. Ta c th kim th unit-test cho ng dng m khng cn chy controller trong tin trnh ASP.NET, v iu gip unit test c p dng nhanh chng v tin dng. Ta c th s dng bt k nn tng unittesting no tng thch vi nn tng .NET.
58
thnh phn ca ASP.NET MVC c thit k chng c th c thay th mt cch d dng hoc d dng ty chnh. Ta c th nhng thm view engine, c ch nh tuyn cho URL, cch kt xut tham s ca action-method v cc thnh phn khc. ASP.NET MVC cng h tr vic s dng Dependency Injection (DI) v Inversion of Control (IoC). DI cho php ta gn cc i tng vo mt lp cho lp s dng thay v buc lp phi t mnh khi to cc i tng. IoC quy nh rng, nu mt i tng yu cu mt i tng khc, i tng u s ly i tng th hai t mt ngun bn ngoi, v d nh t tp tin cu hnh. V nh vy, vic s dng DI v IoC s gip kim th d dng hn.
ASP.NET MVC c thnh phn nh x URL mnh m cho php ta xy dng nhng
ng dng c cc a ch URL xc tch v d tm kim. Cc a ch URL khng cn phi c phn m rng ca tn tp tin v c thit k h tr cc mu nh dng tn ph hp vi vic ti u ha tm kim (URL) v ph hp vi lp a ch theo kiu REST.
l thnh vin, quyn, output caching v data caching, session v profile, qun l tnh trng ng dng, h thng cu hnh ASP.NET MVC 3 cn b sung mt view engine mi l Razor View Engine cho php thit lp cc view nhanh chng, d dng v tn t cng sc hn so vi vic s dng Web Forms view engine.
59
Hnh 5.2. To ng dng MVC Khi ta to mt ASP.NET MVC Framework th hp thoi Unit Test xut hin. Ta cn chn Yes nu mun to Project Test, chn No nu khng mun to mt Unit Test. Sau khi mt ng dng ASP.NET MVC Web Application c to, ta nhn vo trong mc Solution Explorer s thy xut hin mc nh 3 th mc: Models, Views, Controllers cha cc i tng tng ng vi cc thnh phn Models, Views, Controllers trong m hnh MVC. Ta c th m rng th mc Controllers s thy HomeController.cs, m rng th mc Views s thy th mc Home, Shared v Account, m rng th mc Home s thy About.aspx v Index.aspx
60
Hnh 5.3. Qun tr c s d liu trong d n dng MVC ca ASP.Net Ta thc thi ng dng bng cch n F5. Nu l ng dng mi to ln u, ta s thy thng bo hi c cho php m ch Debug hay khng. Nu ta ng chn Modify the Web.config file to enable debugging, hoc khng mun debug th chn Run without debugging.
61
Kt qu khi chy ng dng (h5.5) l ng dng c np vo trnh duyt. Trong v d ny ta ch c 2 trang l Index v About.
form posts, lin kt <a href=> v cc li gi AJAX. Ta s dng cc quy tc nh x URL iu khin URL i vo v i ra tng tnh mm do cho vic lp trnh ng dng, ngha l nu mun thay i cu trc URL. V d
62
/Catalog thnh /Products, c th thay i mt tp hp quy tc nh x mc ng dng m khng cn phi vit li m lp trnh bn trong Controllers v Views.
s to ra mt ASP.NET Application class gi l Global.asax cha cu hnh cc quy tc nh tuyn URL. Xy dng cc nh tuyn thng qua phng thc RegisterRoutes v khi ng dng bt u, phng thc Application_Start() trong Global.asax.cs s gi RegisterRoutes to ra bng nh tuyn.rs
mc nh ControllerAction l Index, mc nh Id l rng. Ngha l khi gi trang web c xy dng thng qua template ASP.NET Web. vi http: //localhost/Home/Index/ Khi ng dng ASP.NET MVC Web Application nhn c mt Url, MVC Framework s nh gi cc quy tc nh tuyn trong tp hp RouteTable.Routes quyt nh Controller no s iu khin request. MVC framework chn Controller bng cch nh gi cc quy tc trong bng nh tuyn theo trt t c sn. 5.3.2 Tm hiu nh tuyn URL Trnh duyt yu cu mt a ch t controller action trong ASP.NET MVC Framework c gi l nh tuyn URL (URL routing). Url routing s ch nh yu cu ti controller action. URL routing s dng mt bng nh tuyn iu khin cc request. Bng nh tuyn c to khi ng dng bt u c chy ln u tin. Bng nh tuyn c thit lp trong tp tin Global.asax nh sau:
using using using using using using System; System.Globalization; System.Threading; System.Web; System.Web.Mvc; System.Web.Routing;
namespace VPAdmin { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801
63
public class VisionPointMVCApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute({resource}.axd/{*pathInfo}); routes.MapRoute( Default, // Route name {controller}/{action}/{id}, // URL with parameters new { controller = Home, action = Index, id = UrlParameter.Optional}); } protected void Application_Start() { //AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); } protected void Application_BeginRequest(object sender, EventArgs e) { HttpContext.Current.Response.AddHeader(Access-Control-Allow-Origin, *); if (HttpContext.Current.Request.HttpMethod == OPTIONS) { HttpContext.Current.Response.AddHeader(Cache-Control, no-cache); HttpContext.Current.Response.AddHeader(Access-Control-Allow-Methods, GET, POST); HttpContext.Current.Response.AddHeader(Access-Control-Allow-Headers, Content-Type, Accept); HttpContext.Current.Response.AddHeader(Access-Control-Max-Age, 1728000); HttpContext.Current.Response.End(); } } } }
Khi ng dng chy ln u tin, phng thc Application_Start() c gi, phng thc ny gi mt phng thc khc RegisterRoutes(RouteTable.Routes) to ra bng nh tuyn.
64
nh tuyn mc nh chia mt yu cu thnh 3 phn on, mi phn on nm gia 2 du /. Phn on u tin cha tn mt controller, phn on th 2 cha tn controller action, phn on th 3 l tham s u vo ca controller action. V d: vi a ch /Product/Details/3 c hiu l: Controller = ProductController Action = Detail Id = 3 V d: vi a ch /Employee: Controller = EmployeeController Action = Index Id =
TM TT
M hnh MVC (Models, Views, Controllers) chia giao din UI thnh 3 phn tng ng: u vo ca controller l cc iu khin thng qua HTTP request, model cha cc min logic, view l nhng th c sinh ra tr v cho trnh duyt. MVC l mt nn tng kh m rng (extensible) & kh nhng (pluggable). Cc thnh phn ca ASP.NET MVC c thit k chng c th c thay th mt cch d dng hoc d dng ty chnh. Ta c th nhng thm view engine, c ch nh tuyn cho URL, cch kt xut tham s ca action-method v cc thnh phn khc. ASP.NET MVC cng h tr vic s dng Dependency Injection (DI) v Inversion of Control (IoC). DI cho php ta gn cc i tng vo mt lp cho lp s dng thay v buc lp phi t mnh khi to cc i tng. IoC quy nh rng, nu mt i tng yu cu mt i tng khc, i tng u s ly i tng th hai t mt ngun bn ngoi, v d nh t tp tin cu hnh. V nh vy, vic s dng DI v IoC s gip kim th d dng hn. ASP.NET MVC c thnh phn nh x URL mnh m cho php ta xy dng nhng ng dng c cc a ch URL xc tch v d tm kim. Cc a ch URL khng cn phi c phn m rng ca tn tp tin v c thit k h tr cc mu nh dng tn ph hp vi vic ti u ha tm kim (URL) v ph hp vi lp a ch theo kiu REST.
65
H tr cc tnh nng c sn ca ASP.NET nh c ch xc thc ngi dng, qun l thnh vin, quyn, output caching v data caching, seession v profile, qu n l tnh trng ng dng, h thng cu hnh
BI TP
1. Trong mt ng dng MVC, liu c tn ti 1 m hnh d liu Models, c n Controllers, mi Controllers iu khin m Views khng? 2. Views ca MVC c th s dng AJAX, javascript khng? 3. Xy dng ng dng vi ASP.NET MVC Framework th trang web s chy nhanh hn so vi xy dng trn nn WebForm c? 4. C phi thc hin test v debug trn ASP.NET MVC Framework d dng hn so vi nn tng WebForm. p: ng. V vic thc hin test v debug trn ASP.NET MVC Framework ch phi thc hin trn Controller nn d dng kim sot hn so vi thc hin test v debug trn WebForm.
66
namespace MvcApplication6.Controllers { public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = Modify this template to jump-start your ASP.NET MVC
67
application.; return View(); } public ActionResult About() { ViewBag.Message = Your app description page.; return View(); } public ActionResult Contact() { ViewBag.Message = Your contact page.; return View(); } } }
Trong HomeController.cs c 2 phng thc l Index() v About(). Hai phng thc ny l 2 hnh ng trong controller HomeController.cs n thc hin khi c gi bng a ch /Home/Index v /Home/About. Bt k phng thc no c thuc tnh public u l mt hnh ng trong controller. Ta to mt Controller mi, trong folder Controllers phi chut chn Add New Item MVC Controller Class
68
69
List<SanPham> sp = data.LaySanPhamTuLoaiSanPham(loaisanpham); return View(DanhSachSanPham, sp); } public ActionResult ChiTietSanPham(int id) { ViewData[Title] = Chi tit sn phm; SanPham ctsp = data.LaySanPhamQuaID(id); return View(ChiTietSanPham, ctsp); } } }
view nm v tr ng dn \Views\Home\Index.aspx
HomeController.About()
tr
mt
view
nm
tr
ng
dn
\Views\Home\About.aspx Ta to view cho controller SanPhamController.cs, trong SanPhamController.cs c 4 phng thc public l Index(), DanhMucLoaiSanPham(), DanhSachSanPham() v ChiTietSanPham(), nn trong Views phi to 4 view tng ng l Index.aspx, DanhMucLoaiSanPham.aspx, DanhSachSanPham.aspx, ChiTietSanPham.aspx bng cch t folder Views bm phi chut chn Add New Folder v nhp tn folder mi to l SanPham. T folder SanPham bm phi chut chn Add View
70
71
(b)
(a) Hnh 6.4. M hnh d liu LINQ to SQL V d: ta to lp tr gip cho vic thao tc vi d liu thng qua LINQ to SQL M ngun tp tin DataClasses.cs:
using using using using System; System.Collections.Generic; System.Linq; System.Web;
72
public List<LoaiSanPham> LayCacLoaiSanPham() { return LoaiSanPhams.ToList(); } public List<SanPham> LaySanPhamTuLoaiSanPham(int id) { return SanPhams.Where(l => l.LoaiSanPham == id).ToList(); } public SanPham LaySanPhamTuID(int id) { return SanPhams.Single(s => s.Id == id); } public void ThemMoiSanPham(SanPham sp) { SanPhams.InsertOnSubmit(sp); } } }
Vi lp tr gip, ta c th thao tc d dng hn vi CSDL khi cn. V d vi lp DataCleasses.cs, khi cn truy cp ly thng tin v sn phm c m ID, c th vit nh sau trong bt k m ngun no ca View (v d view DanhMcLoaiSanPham.aspx.cs trong folder View)
73
Hnh 6.5. Kt hp d liu vo trong Views\DanhMucLoaiSanPham.aspx.cs Ta phi sa i li tp tin Views\DanhMucLoaiSanPham.aspx cho ph hp vi m ngun trn:
<%@ Page Title= Language=C# MasterPageFile=~/Views/Shared/Site.Master %> <asp:Content ID=viewDanhMucLoaiSanPham ContentPlaceHolderID=MainContent runat=server> <h1>y l danh mc loi sn phm</h1> <asp:ListView ID=listLoaiSanPham runat=server> <LayoutTemplate> <ul> <asp:PlaceHolder ID=itemPlaceHolder runat=server></asp:PlaceHolder> </ul> </LayoutTemplate> <ItemTemplate> <li> <%= Html.ActionLink(TenLoaiSanPham, DanhSachSanPham/TenLoaiSanPham, SanPham) %> </li> </ItemTemplate> </asp:ListView> </asp:Content>
74
Views ch cha tt c nhng g hin th cho ngi dng trn trnh duyt, Controllers ch cha cc logic m tr v view no cho ngi dng hoc hng t hnh ng ny n hnh ng khc. Cn li tt c u c vit trong Models.
75
TM TT
Mt Model trong ng dng ASP.NET MVC cha tt c cc nghip v logic m khng c trong controllers v views. Models cha tt c cc tng truy xut d liu logic v tng nghip v logic. V d, nu s dng LINQ to SQL truy nhp d liu th phi to LINQ to SQL class (tp tin nh dng dbml) trong folder Models. View l mt trang aspx m khng c m ngun n (code behind):
View phi c to ng v tr ng dn Ngi ta c th s dng m ngun chn trc tip (code inline) pht trin cc
trang ng
76
Controller Controller chu trch nhim iu khin cc tng tc ca ngi dng bn trong ng dng MVC. Controller s quyt nh ci g c tr v cho ngi dng khi ngi dng to ra mt request trn trnh duyt.
BI TP
Thc hin m rng v d trong bi cho cc i tng thm nh
77
namespace BanHang.Models { partial class DataClassesDataContext { public List<LoaiSanPham> LayCacLoaiSanPham() { return LoaiSanPhams.ToList(); } public List<SanPham> LaySanPhamTuLoaiSanPham(int id) { return SanPhams.Where(l => l.LoaiSanPham == id).ToList(); }
78
public SanPham LaySanPhamTuID(int id) { return SanPhams.Single(s => s.Id == id); } public void ThemMoiSanPham(SanPham sp) { SanPhams.InsertOnSubmit(sp); } } }
7.1.2 Cc hnh ng (action) ti cc b iu khin (controller) Ta thit lp 2 phng thc thm mi d liu trong lp SanPhamController.cs l ThemMoiSanPham v Create. Phng thc ThemMoiSanPham tr v mt Views cho php ngi s dng nhp ni dung sn phm, cn phng thc Create s thc thi cng vic thm mi sn phm khi ngi dng nhn nt gi i d liu.
using using using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.Mvc; System.Web.Mvc.Ajax; BanHang.Models;
namespace BanHang.Controllers { public class SanPhamController : Controller { DataClassesDataContext data = new DataClassesDataContext(); public ActionResult Index() { // Add action logic here ViewData[Title] = Sn phm; return RedirectToAction(DanhMucLoaiSanPham); } public ActionResult DanhMucLoaiSanPham() { // Code cua ban o day ViewData[Title] = Danh mc loi san phm; List<LoaiSanPham> lsp = data.LoaiSanPhams.ToList(); return View(DanhMucLoaiSanPham, lsp); }
79
public ActionResult DanhSachSanPham(int id) { ViewData[Title] = Danh sch sn phm trong loa san phm; List<SanPham> sp = data.LaySanPhamTuLoaiSanPham(id); return View(DanhSachSanPham, sp); } public ActionResult ChiTietSanPham(int id) { ViewData[Title] = Chi tit sn phm; SanPham ctsp = data.LaySanPhamTuID(id); return View(ChiTietSanPham, ctsp); } public ActionResult ThemMoiSanPham() { ViewData[Title] = Thm mi sn phm; ViewData[lsp] = new SelectList(loaiSanpham, Id, TenLoaiSanPham); return View(ThemMoiSanPham, ViewData[lsp]); } public ActionResult Create(string TenSanPham, float DonGia, int SoLuong, int loaiSanPham) { SanPham sp = new SanPham(); sp.TenSanPham = TenSanPham; sp.DonGia = DonGia; sp.SoLuong = SoLuong; sp.LoaiSanPham = loaiSanPham; data.ThemMoiSanPham(sp); data.SubmitChanges(); return RedirectToAction(DanhMucLoaiSanPham); } } }
Ta to Views cho php thm mi sn phm c m ngun trong tp tin Views\SanPham\ThemMoiSanPham.aspx nh sau:.
<%@ Page Language=C# Inherits=System.Web.Mvc.ViewPage<BanHang.Views.SanPham.ThemMoiSanPham> MasterPageFile=~/Views/Shared/Site.Master %> <asp:Content ID=viewDanhSachSanPham ContentPlaceHolderID=MainContent nat=server> <form action=Create method=post> <table border=0 cellpadding=0 cellspacing=0> <tr> <td>Tn sn phm:</td> <td> <input type=text id=TenSanPham name=TenSanPham /></td> </tr>
80
<tr> <td>n gi:</td> <td> <input type=text id=DonGia name=DonGia /></td> </tr> <tr> <td>S lng:</td> <td> <input type=text id=SoLuong name=SoLuong /></td> </tr> <tr> <td> oi sn phm:</td> <td> <%= Html.DropDownList(loaiSanPham,(SelectList)ViewData[lsp]) %> </td> </tr> <tr> <td colspan=2> </td> </tr> <tr> <td colspan=2> <input type=submit value=Thm mi sn phm /></td> </tr> </table> </form> </asp:Content>
81
Ta thit lp cc thuc tnh sau: nh du chn vo checkbox Created a strongly typed view, chn thuc tnh ca View content l Edit, chn thuc tnh ca View data class l BanHang.Models.SanPham ri n nt Add thm vo Views\SanPham\CapNhatSanPham.aspx.
82
namespace BanHang.Controllers { public class SanPhamController : Controller { DataClassesDataContext data = new DataClassesDataContext(); public ActionResult Index() { // Add action logic here ViewData[Title] = Sn phm; return RedirectToAction(DanhMucLoaiSanPham); } public ActionResult DanhMucLoaiSanPham() { // Code cua ban o day
83
ViewData[Title] = Danh mc loi sn phm; List<LoaiSanPham> lsp = data.LoaiSanPhams.ToList(); return View(DanhMucLoaiSanPham, lsp); } public ActionResult DanhSachSanPham(int id) { ViewData[Title] = Danh sch sn phm trong loi sn phm; List<SanPham> sp = data.LaySanPhamTuLoaiSanPham(id); return View(DanhSachSanPham, sp); } public ActionResult ChiTietSanPham(int id) { ViewData[Title] = Chi tit sn phm; SanPham ctsp = data.LaySanPhamTuID(id); return View(ChiTietSanPham, ctsp); } public ActionResult ThemMoiSanPham() { ViewData[Title] = Thm mi sn phm; //List<LoaiSanPham> dulieu = data.LayCacLoaiSanPham(); //var loaiSanpham = from c in data.LoaiSanPhams select c; ViewData[lsp] = new SelectList(loaiSanpham, Id, TenLoaiSanPham); return View(ThemMoiSanPham, ViewData[lsp]); } int public ActionResult Create(string TenSanPham, float DonGia, int SoLuong, loaiSanPham) { SanPham sp = new SanPham(); sp.TenSanPham = TenSanPham; sp.DonGia = DonGia; sp.SoLuong = SoLuong; sp.LoaiSanPham = loaiSanPham; data.ThemMoiSanPham(sp); data.SubmitChanges(); return RedirectToAction(DanhMucLoaiSanPham); } public ActionResult CapNhatSanPham(int id) { ViewData[Title] = Cp nh t sn phm; var spToEdit = (from sp in data.SanPhams where sp.Id = id select sp).First(); ViewData.Model = spToEdit;
84
Trong lp Controllers
85
86
87
Hnh 7.6. To ng dng kim tra 7.3.1 Controller trong ng dng test Ta xy dng mt lp test cho Controllers\SanPhamController.cs trn, to SanPhamControllerTest.cs t folder Controllers ca projects chn Add -> Unit Test
88
89
return View(DanhSachSanPham, sp); } public ActionResult ChiTietSanPham(int id) { ViewData[Title] = Chi tit sn phm; SanPham ctsp = data.LaySanPhamTuID(id); return View(ChiTietSanPham, ctsp); } public ActionResult ThemMoiSanPham() { ViewData[Title] = Thm mi sn phm; ViewData[lsp] = new SelectList(loaiSanpham, Id, TenLoaiSanPham); return View(ThemMoiSanPham, ViewData[lsp]); } public ActionResult Create(string TenSanPham, float DonGia, int SoLuong, int loaiSanPham) { SanPham sp = new SanPham(); sp.TenSanPham = TenSanPham; sp.DonGia = DonGia; sp.SoLuong = SoLuong; sp.LoaiSanPham = loaiSanPham; data.ThemMoiSanPham(sp); data.SubmitChanges(); return RedirectToAction(DanhMucLoaiSanPham); } public ActionResult CapNhatSanPham(int id) { ViewData[Title] = Cp nh t sn phm; var spToEdit = (from sp in data.SanPhams where sp.Id = id select sp).First(); ViewData.Model = spToEdit; return View(); } public ActionResult Update() { return RedirectToAction(DanhMucLoaiSanPham); } } }
90
namespace BanHang.Tests { /// <summary> ///This is a test class for SanPhamControllerTest and is intended ///to contain all SanPhamControllerTest Unit Tests ///</summary> [TestClass()] public class SanPhamControllerTest { private TestContext testContextInstance; /// <summary> ///Gets or sets the test context which provides ///information about and functionality for the current test run. ///</summary> public TestContext TestContext { get {
91
return testContextInstance; } set { testContextInstance = value; } } #region Additional test attributes ///A test for ChiTietSanPham ///</summary> [TestMethod()] [HostType(ASP.NET)] [AspNetDevelopmentServerHost(D:\\@Projects\\@Test\\HiTest\\BanHang\\BanHang, /)] [UrlToTest(http://localhost:2430/)] public void ChiTietSanPhamTest() { SanPhamController target = new SanPhamController(); // TODO: Initialize to an appropriate value int id = 0; // TODO: Initialize to an appropriate value ActionResult expected = null; // TODO: Initialize to an appropriate value ActionResult actual; actual = target.ChiTietSanPham(id); Assert.AreEqual(expected, actual); Assert.Inconclusive(Verify the correctness of this test method.); } #endregion } }
7.3.2 Kim th kt qu tr v t mt controller. Kim tra xem view c tr v c ng khng v khi no th n c gi n, phng thc no ca view c tr v. M ngun tp tin BanHang.Tests\Controllers\SanPhamControllerTest.cs
[TestMethod()] [HostType(ASP.NET)] [AspNetDevelopmentServerHost(D:\\@Projects\\@Test\\HiTest\\BanHang\\BanHang, /)] [UrlToTest(http://localhost:2430/)] public void DetailViewTest() { SanPhamController sp = new SanPhamController(); var result = sp.ChiTietSanPham(8) as ViewResult; Assert.AreEqual(ChiTietSanPham, result.ViewName); }
Sau ta thc hin cng vic kim th bng cch la chn mt phng thc, chn Run Selection.
92
TM TT
Bi hc ny gii thiu v phng php x l thm v hiu chnh d liu trong MVC. Ngoi ra, bi hc cn trnh by v vn kim th trong ng dng MVC. C 3 kiu unit test trong ng dng ASP.NET MVC dng kim th cc controllers c xy
93
dng: test view c tr v t controller action, test d liu tr v t mt controller action, test mt controller action c redirect ti mt ti mt controller action khc. Mc nh khi to ng dng vi ASP.NET MVC, h thng xy dng sn mt project test cho ngi dng.
BI TP
Xy dng trang ch bn tin in t cho tng lnh vc, trong bi thc hnh ny, ta s lm quen vi cch xy dng mt trang web tng tc vi CSDL s dng k thut phn trang trn DataGrid.
Xy dng Trang ch cho tng lnh vc, cho php xem bn tin theo ngy thng. c v hin th thng tin c phn trang t CSDL ln DataGrid
(AccessDataSource vi DataGrid).
S dng JavaScript cho php ngi dng chn xem tin theo ngy thng. Xy dng trang qun l tin, trong bi thc hnh ny, ta s xy dng trang website
qun l tin:
Cho php chn mt lnh vc t combo box v hin th danh sch tin thuc lnh
vc c chn.
Cho php sp xp danh sch tin theo ngy ng tin, tiu . Cho php chn tin xo.
94
8.1 AUTHENTICATION - XC TH C NG I D NG
Hin nay trn th gii gii thiu nhiu phng php xc thc ngi dng nh Windows Authentication, Forms Authentication. php xc thc ngi dng da trn Forms. Mc ch ca bi ny l gii thiu cch dng Forms Authentication yu cu bo mt bng mt khu cho cc Views. Vic dng Website Administration Tool ta ngi dng v phn quyn nhm ngi dng s gip chng ta ngn chn c nhng ngi dng tri php. 8.1.1 To ngi dng mc nh vi ng dng ASP.NET MVC Mc nh khi ng dng c to s c sn mt Controllers c tn l AccountController.cs v c sn cc Views tng ng ChangePassword.aspx, ChangePasswordSuccess.aspx, Login.aspx, Register.aspx phn ny ta ch tm hiu phng
95
Hnh 8.1. Account Controller, v View tch hp sn trong ng dng MVC Sau y l giao din ng k ngi dng mi:
96
8.1.2 Qun l ngi dng vi cng c Website Administration Ta chn menu Projects ASP.NET Configuration. Khi xut hin cng cu Website Administration Tool, ta chn Chn tab Security.
Hnh 8.3. Cng c Website Administration Tool Bm vo lin kt Create User to ngi dng, v d tn Lan.
97
Hnh 8.4. To ngi dng vi Website Administration Tool 8.1.3 Roles - Phn quyn nhm ngi dng to role, trc ht ta cn phi cho php role bng cch bm vo lin kt Enable roles sau bm vo lin kt Create and Manage roles to role c tn Administrators.
98
Hnh 8.5. To role cho ngi dng Tip theo to mt ngi dng mi kt hp vi role c.
99
Hnh 8.6. To ngi dng vi role Administrators By gi ta c 2 ngi dng mi, ngi dng Lan khng thuc roles v ngi dng Trang thuc roles Administrators. Tip theo, ta xy dng mt controllers xem tin tc c bo mt vi yu cu ngi dng phi ng nhp mi c quyn xem v ty thuc i tng ngi dng no s c vo cc vng tin tc no.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace BanHang.Controllers { public class TinTucController : Controller { public ActionResult Index() { return View(); } [Authorize]
100
public ActionResult NguoiDung() { return View(); } [Authorize(Users = Lan)] public ActionResult NguoiDungCuThe() { return View(); } [Authorize(Roles = Administrators)] public ActionResult NhomNguoiDung() { return View(); } } }
To ra cc Views tng ng vi cc phng thc ca TinTucController.cs: Index.aspx dnh cho tt c ngi dng (k c ngi dng khng c xc thc), NguoiDung.aspx ch dnh dnh cho cho nhng ngi ngi dng dng c bit c tn xc l thc, Lan, NguoiDungCuThe.aspx
Ta
thm
mt
tab
Tin
Tc
bng
cch
to
mt
Html.ActionLink
trong
Views\Shared\Site.Master.
101
102
Hnh 8.9. C s d liu ASPNETDB c pht sinh ti App_Data Thng thng cc ng dng thc t, hu ht cc nh pht trin u t khi dng c s d liu nm trong SQL Express m thng s dng SQL Server lu tr c s d liu. C th thay i SQL Server lu tr thng tin ngi dng bng hai bc sau:
Thay i connectionstring trong web.config tr n c s d liu c to Ta c th dng dng lnh to c s d liu tch hp sn cc bng cho Asp.Net
Membership nh sau: Vo Start All Programs Visual Studio 2008 Visual Studio Tools Visual Studio 2008 Command Prompt ri nh vo aspnet_regsql
Hnh 8.10. Thc thi aspnet_regsql t Visual Studio 2008 Command Prompt Ngoi ra ta cn c th sa i tp tin cu hnh web.config trong ng dng ASP.NET MVC Application chuyn lu tr thng tin ngi dng vo c s d liu BanHang trong SQL Server 2005 thay v s dng c s d liu ASPNETDB.MDF c sn ca Visual Studio 2008 trong folder App_Data.
103
Sau ta s dng Intergrated Security kt ni c s d liu cn c thm mt ti khon ngi dng ca Windows ng nhp vo c s d liu. Ti khon ny ph thuc vo s dng web server no khi thc thi ng dng gm ASP.NET Development Server (mc nh ca Visual Studio) v Internet Information Services (component ca Windows), v ti khon ng nhp c s d liu cng ph thuc vo h iu hnh. Nu s dng ASP.NET Developmet Server, ta cn thm ti khon ngi dng ca Windows ng nhp vo database server. Nu s dng IIS, ta cn phi thm ti khon ngi dng ASPNET (trong WindowsXP) hoc NT l
AUTHORITY/NETWORK SERVICE (trong Windows Vista/Windows Server 2008/Windows 7)
ng nhp database server. Ngoi ra, ta c th thm ti khon ngi dng mi ng nhp c s d liu s dng cng c Microsoft SQL Server Management Studio
104
Hnh 8.11. To ti khon ng nhp mi cho c s d liu Sau khi to ti khon ng nhp c s d liu, ta cn phi thit lp quyn truy nhp ca ti khon v thit lp quyn truy nhp s dng User Mapping
TM TT
105
Bi hc ny gii thiu cc phng php xc thc ngi dng nh Windows Authentication, Forms Authentication v tp trung gii thi phng php xc thc ngi dng da trn Forms. Trong thc t, vic s dng Website Administration Tool ta ngi dng v phn quyn nhm ngi dng, ngn chn nhng ngi dng tri php s l gii php hp l v hiu qu. Thng tin v ngi dng v quyn truy nhp cho nhm ngi dng c lu trong c s d liu. Ngoi ra, ta c th dng dng lnh to c s d liu tch hp sm cc bng cho Asp.Net Membership hoc s dng giao din Website Administration Tool.
106
BI TP
Bo v Website vi Membership v Login Controls. Trong bi thc hnh ny, ta s:
S dng cc Login controls.Tm hiu Role o Authentication: Chng thc thng qua User Account (UserName v Password). o Authorization: s dng role phn quyn cho Authenticated Users.
Phn quyn, iu hng trang, p dng phn quyn, phn nhm cho cc website
thng mi in t, hoc cc ng dng qun tr ni dung vi cc quyn, qun tr (admin), qun l (manager), ngi dng (registered user).
107
TI LIU THAM KH O
1. Visual Web Developer, URL: http://msdn.microsoft.com/enus/library/ms178093.aspx 2. Microsoft ASP.NET, URL: http: //www .asp.net/ 3. Bill Evjen, Scott Hanselman, Devin Rader (2008). Professional ASP.NET 3.5 In C# And VB. 4. jQuery, URL: http://docs.iquery.com 5. ScottGu's Blog, URL: http://weblogs.asp.net/scottgu/archive/2008/12/02/dec2nd-links-asp-net-asp-net-dynamic-data-asp-net-aiax-asp-net-mvc-visualstudio-silverlight-wpf.aspx 6. MSDN Online hoc offline ca Microsoft 7. M ngun tham kho http://www.wrox.com. 8. Cc ch lp trnh http://www.codeguru.com, http://www.codeproject.com hay http://www.java2s.com