Download as pdf or txt
Download as pdf or txt
You are on page 1of 113

B GIO DC V O TO I HC CNG NGH TP.

HCM

LP TRNH NG DNG WEB

Bin son:

GV.Mai Ngc Thu

Website: http://www.hutech.edu.vn

LP TRNH NG DNG WEB n bn 2013

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

KIN THC TIN

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.

CCH TIP NHN NI DUNG MN HC


hc tt mn ny, ngi hc cn c trc cc ni dung cha c hc trn lp; tham gia u n v tch cc trn lp; hiu cc khi nim, tnh cht v v d ti lp hc. Sau khi hc xong, cn n li bi hc v lm cc bi tp, cu trc nghim. Tm c thm cc ti liu khc lin quan n bi hc v lm thm bi tp.

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.

1.1 TNG QUAN ASP.NET


1.1.1 Gii thiu Trc ht, tn y ca ASP.NET l Active Server Pages .NET (.NET y l .NET framework). Ni n gin th ASP.NET l mt cng ngh c tnh cch mng dng pht trin cc ng dng v mng hin nay cng nh trong tng lai. ASP.NET l mt phng php t chc hay khung t chc (framework) thit lp cc ng dng mnh cho mng da trn CLR (Common Language Runtime). 1.1.2 ASP.NET tch hp vi Framework .NET Framework c chia thnh b cc tc v cho tng chc nng gm cc lp (class), cc cu trc (structures), cc giao din (interfaces) v cc li (core) thnh phn chng trnh. Trc khi s dng thnh phn no ta phi hiu c bn v chc nng, cc t chc ca n. Mi mt trong hng nghn cc tng lp c nhm theo trnh t logic, th bc c gi l mt namespace. Mi namespace cung cp mt tnh nng. 1.1.3 Tnh a ngn ng xy dng mt ng dng web chng ta khng ch chn mt ngn ng m c th chn nhiu ngn ng khc. iu quan trng l cc ngn ng chng ta chn m ca

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

ny m IL c dch thnh bn m my (Native Machine Code). Giai on ny c gi l Just-In-Time (JIT).

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:

Qun l b nh Thu nht rc Qun l cc tuyn X l ngoi l An ton

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.

1.2 TNH NNG MI TRONG ASP.NET


Microsoft pht hnh ASP.NET vo ngy 19 thng 11 nm 2007 cng vi Visual Stutio 2008. y l bc tin ha t ASP.NET 2.0 ti ASP.NET 3.5. Nu chng ta ang s dng ASP.NET 2.0 s dng ASP.NET 3.5 ch cn ci t thm cc tnh nng mi ca ASP.NET 3.5. Trong phn ny ta s gii thiu mt s tnh nng mi trong ASP.NET 3.5 1.2.1 Cc cng c iu khin mi Cc cng c (control) ListView v DataPager c th dng mi kiu d liu mi LinqDataSource. ListView linh hot hn v c cha ton b tnh nng ca Gridview, Datagrid, Repeater trong ASP.NET 2.0. N cung cp cc kh nng v chn, xa, sa, sp xp, phn trang. Chng ta hon ton nh dng c vic d liu hin th trn ListView m khng cn phi s dng th <table>. Cc Template trong ListView rt phong ph v a dng. Datager cung cp cho ListView trong vic phn trang. 1.2.2 LINQ LINQ (Language Integrated Query) cung cp kh nng lp trnh mi trong .NET l gii php lp trnh hp nht, em n kh nng truy vn d liu theo c php SQL trc tip trong C# hay VB.NET, p dng cho tt c cc dng d liu t i tng n C s d liu quan h v XML. 1.2.3 Cc Assembly mi

System.Core.dll: Cc ci t cho LINQ to Objects

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:

Model: Model c giao nhim v cung cp d liu cho c s d liu v lu d

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.

Controller: Controller l tng trung gian gia Model v View. Controller c

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.

1.3 TO TRANG WEB VI VISIUAL STUDIO


1.3.1 To d n mi

Chng ta kch hot ng dng Visual Studio (h1.2).

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

Hnh 1.3. Chn ng dng Web form application 1.3.2 V d

Hnh 1.4. To d n dng Web form

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

3.5 </font> </div> </form> </body> </html>

thc thi ng dng web ny di dng Debug, chng ta chn Deburg Start Debugging hoc bm phm F5.

1.4 CC S

KIN TRONG ASP.NET

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

thnh tp tin .DLL v nm trong th mc /Bin.

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:

Ngi dng kt thc trnh duyt. Session kt thc (timeout).

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:

Application_Start Application_End Application_Error Session_Start Session_End

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

Ngi dng kt thc trnh duyt. Session kt thc (timeout).

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:

Model: Model c giao nhim v cung cp d liu cho c s d liu v lu d

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.

Controller: Controller l tng trung gian gia Model v View. Controller c

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)

BI 2. CC LP S DNG TRONG ASP.NET

15

BI 2. CC LP S DNG TRONG ASP.NET


Hc xong bi ny ngi hc s nm c cc ni dung sau. Hiu c cc khi nim v i tng Http Request, Http Response, Http Server, Session, Cookie. Bit vn dng thnh tho nhng i tng ny trong bi lp trnh lin quan.

2.1 HTTP REQUEST


2.1.1 Gii thiu Request l mt th hin ca lp HttpRequest. Trnh duyt dng i tng Request gi thng tin cn thit ti Server.

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

BI 2. CC LP S DNG TRONG ASP.NET

2.1.2 Cc thuc tnh


2.1.2.1 REQUESTTYPE

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.

Ly d liu t cc phn t ca form: C php: var VarName= Request.Form[FieldName]; V d: ti trang Default.aspx

<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 />

BI 2. CC LP S DNG TRONG ASP.NET

17

<b>Password</b> <%=Request.Form[txtPwd]%>

Count: tr v s phn t ca form chuyn t client n server C php: int Numelement=Request.Form.Count;

Tp hp kha Keys: tr v tn ca phn t ti v tr th i, trong i c gi tr

t 0 n n-1, vi n=Request.Form.Count C php: var Varfield=Request.Form.Keys[i];

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

BI 2. CC LP S DNG TRONG ASP.NET

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

Cch 1: dng action , tham s truyn qua phn t ca form


<form method=Get action=FileName.aspx> Cc phn t ca form </form>

Cch 2: dng action , tham s ghi sau du ?


<form method=Get action=FileName.aspx?var1=value1&var2=value2> Cc phn t ca form </form>

Cch 3: dng chui lin kt , tham s ghi sau du ?. Cc tham s c khai bo

cch nhau bi du &, gi tr ca mi tham s t sau du =


<a href=FileName.aspx?var1=value1&var2=value2&> Text hoc image </a>

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

Keys[i]: tr v tn ca phn t ti v tr th i, trong i c gi tr t 0 n n -1

vi n = Request.QueryString.Count C php: var Varfield=Request.QueryString.Keys[i];

BI 2. CC LP S DNG TRONG ASP.NET

19

Hnh 2.3. Form ng nhp ti Login.aspx


<%@ Page Language=C# AutoEventWireup=true CodeBehind=Login.aspx.cs Inherits=ViDu1.Login %> <!DOCTYPE html> <html xmlns=http://www.w3.org/1999/xhtml> <head runat=server> <title></title> </head> <body> <form method=GET runat=server> UserName: <input type=text name=txtUser /><br /> Password: <input type=password name=txtPwd /><br /> <input type=submit name=btnLogin value=Login /><br /> <asp:Label runat=server ID=ResultTextBox></asp:Label> </form> </body> </html>

Ti Server, trang Login.aspx.cs, ta ly gi tr ca UserName v Password:


using System; namespace ViDu1 { public partial class Login : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (this.IsPostBack) { string strUser = Request.QueryString[txtUser]; string strPws = Request.QueryString[txtPwd]; if (strUser == admin && strPws == 123){ ResultTextBox.Text = Dang nhap thanh cong; } else{ ResultTextBox.Text = Dang nhap khong thanh cong; }

20
} } }

BI 2. CC LP S DNG TRONG ASP.NET

2.2 HTTP RESPONSE


2.2.1 Gii thiu Http Response c dng truyn d liu my ch web n trnh duyt web.

Hnh 2.4. V d Response 2.2.2 Cc thuc tnh/phng thc

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

isClientConnected: Kim tra my client c yu cu kt ni n server, kt qu

tr v gi tr true/false

Cookies: c s dng ghi Cookies. Cookies c th hin trong asp.Net l

lp Httpcookies

Clear(): Xa vng tm C php: Response.Clear()

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

BI 2. CC LP S DNG TRONG ASP.NET

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

Write(Data): Ghi d liu ra trang web V d: Response.Write(Hello world);

2.3 HTTP SERVER

i tng Server cung cp cc phng thc gip chuyn iu khin gia cc

trang vi nhau, ly thng tin v m li, encode,

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 &lt; o K t > chuyn thnh &gt; o K t & chuyn thnh &amp; o Du nhy i chuyn thnh &quot;

HtmlDecode(strcontent):gii m cc th HTML V d: Str=n&gt;5; Str=server.HtmlDecode(str); // kt qu n>5

Transfer: gi tt c thng tin m n x l t trang ASP hin hnh sang trang

ASP khc

22

BI 2. CC LP S DNG TRONG ASP.NET

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.

2.4 SESSION V COOKIE


2.4.1 Gii thiu Cookie v Session im chung gia Cookie v Session l vic lu tr v qun l mt s thng tin lin quan n ngi dng website, nhng thng tin ny cn dng trn nhiu trang web ca cng h thng website. Thng tin c lu tr vi khong thi gian quy nh trc, v c th t hy khi ht thi gian cho php. Cookie v Session thun tin cho vic gi thng tin qua li gia cc trang web m khng cn dng qua phng thc POST/GET gim thiu vic pht sinh thm bin. ng dng thng thy ca Cookie v Session l lu tr thng tin ng nhp ca ngi dng, xc nh thi im ng nhp, thot khi website Kt hp vi thao tc Redirect c th qun l, chn truy cp t ngi dng khi cha ng nhp 2.4.2 Cookie
2.4.2.1 C IM COOKIE

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).

BI 2. CC LP S DNG TRONG ASP.NET

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.

2.4.2.2 PHNG THC THAO TC

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

l cc thuc tnh ca bin Cookie.

c Cookie: C php: value = Request.Cookies[cookie][key|attribute];

24

BI 2. CC LP S DNG TRONG ASP.NET

Thao tc trn Cookie c nhiu Subkey Xa Cookie: Vic xa Cookie thc cht l thao tc chnh thi gian hiu lc v

trc thi im hin ti so vi gi h thng. 2.4.3 Session


2.4.3.1 C IM

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.

BI 2. CC LP S DNG TRONG ASP.NET

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>

SessionID: cha ID ca session ang kch hot, mi user c phn bit bi

sessionID gi l m phin lm vic.


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

BI 2. CC LP S DNG TRONG ASP.NET

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:

BI 2. CC LP S DNG TRONG ASP.NET

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:

Ta bm p vo nt Reset thc hin vit m lnh nh sau:

Ta vit s kin cho nt Submit v bm p vo nt Submit thc hin lnh:

28

BI 2. CC LP S DNG TRONG ASP.NET

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.

3.1 TNG QUAN


Phn ln cc ng dng hin nay u s dng c s d liu. C nhiu cch thc truy cp d liu khc nhau trong cc cng ngh ca Microsoft nh ADO, RDO, DAO, ODBC. Tuy nhin t khi .NET Framework ra i th cng ngh ADO.NET c tch hp, ADO.NET cha cc lp cho php cc ng dng kt ni vi cc ngun d liu (connect data sources), thc hin cc lnh (execute commands), qun l d liu ngt kt ni (manage disconnected data). Vi ADO.NET, ngi lp trnh c th vit t m lnh thao tc c s d liu hn so vi cc cng ngh trc trong cc ng dng client-server hoc cc ng dng trn desktop. Mt khc, trong ASP.NET t phin bn .NET Framework 2.0 tr ln c thm cc thao tc vi c s d liu m khng s dng ADO.NET nh SqlDataSource, LINQ hoc Profiles. Ngoi ra cc ng dng truy cp d liu ca .NET Framework cn c th truy nhp vo cc ngun d liu ngoi nh tp tin, Stream, XML, Ajax, web services, WCF, data services. Trong bi hc ny, ta s to ra mt Web site project thao tc vi c s d liu, s dng Visual Studio 2008 to mt project Website, trong to mt c s d liu tn

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.1. Thm Sql c s d liu t d n

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>

3.2 TRUY CP D LIU ADO.NET


ADO.NET Data Providers cho php truy nhp vo mt c s d liu c th, thc hin cc cu lnh SQL v nhn d liu. Data provider l chic cu ni gia ng dng v ngun d liu. Lp ADO.NET Data Provider bao gm cc thnh phn:

Connection: Thc hin kt ni 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:

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:

Hnh 3.3. Hin th danh sch hang ha trn trang vi GridView

3.3 TRUY CP D LIU XML


D liu XML ngy cng thng dng v c pht trin mnh m hn trc. Trong cc ng dng ngy nay, vic s dng XML thay cho d liu truyn thng ang c xu hng pht trin mnh m. Tuy nhin cc ng dng s dng XML lm c s d liu vn cn mc quy m nh v hn ch.

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>

Ni dung tp tin XML.aspx.cs:


DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath(Employee.xml)); DataTable dt = ds.Tables[Employees]; GridView1.DataSource = dt.DefaultView; GridView1.DataBind();

Kt qu chng trnh l:

Hnh 3.4. Kt qu chng trnh

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.6. Cu hnh kt ni Kt qu chng trnh l:

Hnh 3.7. Trang hin th danh sch kho hng trn trnh duyt

3.5 TRUY CP D LIU LINQ


LINQ l mt s sng to mi trong .NET Framework 3.5 (Language Integrate Query) l mt tp hp m rng ngn ng cho php thc hin cc truy vn trong ngn ng C# 2008 v Visual Basic 2008. LINQ cho php chn (select), lc (filter), sp th t (sort), nhm (group) v chuyn (transform) d liu t cc ngun d liu (data source) khc nhau theo mt cch chung. LINQ to Objects thc hin truy vn cc i

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

IEnumerable<HangHoaChiTiet> dmhh = from hh in dshh where hh.HangHoa_TenHang.ToString().StartsWith(B)

BI 3. TRUY CP D LIU

37

select hh;

hoc:
IEnumerable<HangHoaChiTiet> dmhh = from hh in dshh orderby hh.HangHoa_TenHang select hh;

Ta c th dng LINQ nh sau (hai cu lnh sau tng ng nhau):


IEnumerable<HangHoaChiTiet> dmhh = from hh in dshh 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.

Hnh 3.8. Thm Linq to SQL vo d n

38

BI 3. TRUY CP D LIU

Sau ta to ra m hnh LinqSqlDataContext cho php Linq ly d liu t c s d liu DB_TEST.MDF

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

Hnh 3.10 Kt qu thc thi Kt qu chng trnh l:

Hnh 3.11. Danh sch hng ha

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

Cho php thm, xo, sa tin. Yu cu:

nm bt c cch thc kt ni CSDL. Xy dng c kin trc 3 tng. To cc class : LinhVucInfo, BanTinInfo, BanTinController , LinhVucController,

LinhVucDAL, BanTinDAL, DataService.

42

BI 4. Lp trnh giao din web vi jQuery

BI 4. Lp trnh giao din web vi jQuery


Hc xong bi ny ngi hc s nm c cc ni dung sau: Bit c jQuery l g, cch thc ng k s dng jQuery trang html v phng php lp trnh jQuery vi giao din html Bit vn dng thnh tho nhng i tng ny trong bi lp trnh lin quan.

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.

BI 4. Lp trnh giao din web vi jQuery

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

BI 4. Lp trnh giao din web vi jQuery

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>

BI 4. Lp trnh giao din web vi jQuery

45

4.2 LP TRNH VI jQUERY


4.2.1 Chy m khi trang sn sng Ta c th thy rng hu ht khi lp trnh vi Javascript, kt thc m thc thi bng cch thm cc dng m vo script, tng t nh sau: window.onload = function() { ... } Cc m bn trong s c thc thi khi trang c ti xong. Tuy nhin, m Javascript khng chy cho n khi tt c cc hnh nh trong trang c ti xong,k c banner qung co. L do cho vic s dng window.onload l chc chn rng i tng HTML document phi c ti xung ht, sau mi chy m kia. gii quyt, jQuery c cu lnh n gin, c bit nh:
$(document).ready(function() { //M ca chng ta });

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 $():

$(p): p l tn ca mt th (tag). $(#id): id l tn ca mt id. $(.class): class l tn ca mt lp.

4.2.3 Mt s API trong jQuery


4.2.3.1 CHN SELECTOR

46

BI 4. Lp trnh giao din web vi jQuery

#id : chn i tng vi id cho trc. Nu id cha cc k t nh du chm (.)

hoc 2 du [] th chng phi thm 2 du ngch cho (\\) vo trc cc k t . V d:


$(#mainDiv).css(font-style, italic); Nu l $(#some.id) th phi vit thnh $(#some\\.id) Nu l $( #some [id] ) th phi vit thnh $(#some\\[id]\\)

Element: chn nhng i tng vi tag c gn V d chn nhng element l select:

$(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);

Selector1, selector2, selectorN : Ph hp vi s kt hp ca tt c cc kt

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;

BI 4. Lp trnh giao din web vi jQuery

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>

Ancestor descendant: Tng ng vi tt c cc phn t vi danh ngha

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:

$( label + input).css(color, blue).val(Labeled!);

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

BI 4. Lp trnh giao din web vi jQuery

<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> &nbsp; <button>Hy b</button> </div> </form> </body> </html>

BI 4. Lp trnh giao din web vi jQuery

49

Hnh 4.3 Kt qu khi thc hin chng trnh


4.2.3.2 LC - FILTER

first : Tng ng vi phn t u tin c chn. V d:

$(tr:first).css(font-style, italic);

last : tng ng vi phn t cui cng c chn. V d:

$(tr:last).css(background-color, yellow);

:not(selector) : B ra tt c cc phn t tng ng cho selector. V d :

$(input:not(:checked)+span).css(background-color, yellow);

:even : Tng ng vi cc phn t chn, ch s 0, 2, 4, ... V d:

$(tr:even).css(background-color, #bbbbff);

:odd : Tng ng vi cc phn t l, ch s 1, 3, 5, ... V d: V d:

$(tr:odd).css(background-color, #bbbbff);

:eq(index) :Tng ng vi mt phn t ring l bi ch s ca n. V d gn css cho cc ct l ca bng:

V d: $(td:eq(2)).css(color, red);

50

BI 4. Lp trnh giao din web vi jQuery

<!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

BI 4. Lp trnh giao din web vi jQuery

51

4.2.3.3 HTML TEXT VAL

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.

$(div).html(<b>Cho cc bn!<i> Chc bui hc hm nay th v.</i></b>);

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.

$(div).text(Cho cc bn! Chc bui hc hm nay th v);

Val

Phng thc ny ch c cc phn t c thuc tnh value nh input, select val() Kiu tr v: String

52

BI 4. Lp trnh giao din web vi jQuery

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

:hidden Tng ng vi tt c cc phn t c n i hoc phn t vo c dng

n hidden.
V d: $(div:hidden).show(3000);

:visible : tng ng vi cc phn t nhn thy c V d: Bm chut vo cc th div nhn thy c.

V d: $(div:visible).click(function() {$(this).css(background, yellow);});

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.

BI 4. Lp trnh giao din web vi jQuery

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

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK


Hc xong bi ny ngi hc s nm c cc ni dung sau: Kin thc c bn v M hnh MVC cng cc c tnh, v u im khi p dng m hnh MVC Phng php iu hng URL vi MVC Bit cch xy dng ng dng MVC n gin v vn dng thnh tho nhng k thut lin quan m hnh MVC trong bi lp trnh lin quan.

5.1 TNG QUAN ASP.NET MVC


5.1.1 M hnh MVC c bn MVC vit tt ca Models, Views, Controllers. MVC 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.

Hnh 5.1. M hnh MVC c bn

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

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...

C kh nng m rng, mi th trong MVC c thit k cho php d dng thay

th/ty bin. V d: ta c th la chn s dng engine view ring, routing policy, parameter serialization, v.v...

Bao gm mt nh x URL mnh m cho php xy dng ng dng vi nhng URL

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

ASP.NET MVC Framework cng h tr nhng tp tin ASP.NET nh .ASPX .ASCX

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 )

ASP.NET MVC Framework h tr y cc tnh nng bo mt ca ASP.NET nh

forms/windows authenticate, URL authorization, membership/roles, output v data caching, session/profile state, configuration system, provider architecture v.v...

56

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

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

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

57

Tnh nng vi javascript URL Address

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:

D dng qun l s phc tp ca ng dng bng cch chia ng dng thnh ba

thnh phn model, view, controller

N khng s dng view state hoc server-based form. iu ny tt cho nhng

lp trnh vin mun qun l ht cc kha cnh ca mt ng dng.

N s dng mu Front Controller, mu ny gip qun l cc yu cu (requests)

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

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

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.

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, 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.

5.2 XY D NG NG DNG VI ASP.NET MVC


Tnh nng ASP.NET MVC Framework c tch hp sn t phin bn VS Studio 2010 tr i. 5.2.1 To Project vi ASP.NET MVC Web Application Trong chng trnh Visual Studio 2008 ci t ASP.NET MVC Framework, ta thc hin: Tp tin New Project Windows C# ASP.NET MVC Web Application

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

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

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

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.

Hnh 5.4. Minh ha cc bc to mt ASP.NET MVC

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

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.

Hnh 5.5 Chng trnh MVC u tin

5.3 NH TUYN URL


5.3.1 Gii thiu ASP.NET MVC Framework c mt h thng nh tuyn URL (URL Routing System) linh hot cho php xc nh cc quy tc nh x a ch URL bn trong ng dng. Mt h thng nh tuyn c 2 mc ch:

Xy dng mt tp hp cc URL i vo ng dng v nh tuyn chng ti cc

Controller v thc thi cc phng thc Action x l.

Xy dng cc URL gi i m c th gi ngc tr li Controllers/Actions. V d:

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

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

/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.

Cc quy tc nh tuyn URL mc nh trong ASP.NET MVC Web Application

Mc nh khi to ng dng vi ASP.NET MVC Web Application tr ong Visual Studio

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

Vi ASP.NET MVC Web Application th mc nh Controllers l HomeController,

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

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

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

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

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.

BI 5. TNG QUAN V ASP.NET MVC FRAMEWORK

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

BI 6. Model View Controller

BI 6. Model View Controller


Hc xong bi ny ngi hc s nm c cc ni dung sau: Kin thc chuyn su tng thnh phn trong m hnh MVC Bit cch vn dng thnh tho nhng k thut lin quan m hnh MVC trong bi lp trnh lin quan.

6.1 TM HIU V 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. Mt controller l mt class (C# class hoc VB class). Trong v d ng dng ASP.NET MVC Web Application mu lun tn tai 2 controller l AccountController.cs v HomeController.cs nm trong folder Controllers. M ngun ca tp tin HomeController.cs:
using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.Mvc;

namespace MvcApplication6.Controllers { public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = Modify this template to jump-start your ASP.NET MVC

BI 6. Model View Controller

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

BI 6. Model View Controller

Hnh 6.1 To controller tn l SanPhamController.cs M ngun ca SanPhamController.cs:


using System.Collections.Generic; using System.Web.Mvc; using 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 sn phm; List<LoaiSanPham> lsp = data.LoaiSanPhams.ToList(); return View(DanhMucLoaiSanPham, lsp); } public ActionResult DanhSachSanPham(string loaisanpham) { ViewData[Title] = Danh sch sn phm trong loi sn phm;

BI 6. Model View Controller

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); } } }

6.2 TM HIU V VIEW


Trong controller HomeController.cs, c hai phng thc Index() v About() u tr v mt view. Mt view cha cc th HTML v c tr v cho trnh duyt. Trong m hnh MVC th mt view tng ng vi mt trang .aspx trong WebForm. View phi c to ng v tr ng dn. V d:

controller HomeController.cs th hnh ng HomeController.Index() tr v mt

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

BI 6. Model View Controller

Hnh 6.3 To view DanhMucLoaiSanPham trong folder SanPham

Hnh 6.2 Ca s d n dng MVC

M ngun tp tin DanhMucLoaiSanPham.aspx:


<%@ Page Title= Language=C# MasterPageFile=~/Views/Shared/Site.Master Inherits=System.Web.Mvc.ViewPage<dynamic> %> <asp:Content ID=Content1 ContentPlaceHolderID=MainContent runat=server> <h1>y l danh mc loi sn phm</h1> <% foreach (var lsp in ViewData.Model) { %> <li> <%= Html.ActionLink(lsp.TenLoaiSanPham, DanhSachSanPham/ + lsp.TenLoaiSanPham) %> </li> <% } %> </asp:Content>

BI 6. Model View Controller

71

6.3 TM HIU V MODEL


Mt model trong ng dng ASP.NET MVC cha tt c cc nghip v lun l 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 th mc Models. M hnh d liu LINQ ti SQL:

(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;

namespace BanHang.Models { partial class DataClassesDataContext {

72

BI 6. Model View Controller

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)

BI 6. Model View Controller

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

BI 6. Model View Controller

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.

6.4 CU TRC VIEWS\SHARE\SITE.MASTER


M ngun tp tin SITE.MASTER:
<%@ Master Language=C# AutoEventWireup=true CodeBehind=Site.master.cs Inherits=BanHang.Views.Shared.Site %> <!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd> <html xmlns=http://www.w3.org/1999/xhtml> <head id=Head1 runat=server> <meta http-equiv=Content-Type content=text/html; charset=iso-8859-1 /> <title><%= Html.Encode(ViewData[Title]) %></title> <link href=../../Content/Site.css rel=stylesheet type=text/css /> </head> <body> <div class=page> <div id=header> <div id=title> <h1>My Sample MVC Application</h1> </div> <div id=logindisplay> <% Html.RenderPartial(LoginUserControl); %> </div> <div id=menucontainer> <ul id=menu> <li><%= Html.ActionLink(Home, Index, Home)%></li> <li><%= Html.ActionLink(SanPham, Index, SanPham)%></li> <li><%= Html.ActionLink(About Us, About, Home)%></li> </ul> </div> </div> <div id=main> <asp:ContentPlaceHolder ID=MainContent runat=server /> <div id=footer> My Sample MVC Application &copy; Copyright 2008 </div> </div> </div> </body> </html>

BI 6. Model View Controller

75

Hnh 6.6. Kt qu chy ng dng hin th dnh mc sn phm

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):

Tt c cc trang HTMLc to ra v nh dang trang c th c th c thc

hin bn trong View.


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

BI 6. Model View Controller

Mt yu cu t View c th ch c thc hin t phng thc ng ca

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

ChungLoaiSanPham, DonDatHang, PhieuNhapHang, HoaDonBanHang.

BI 7. Cp nht d liu vi MVC

77

BI 7. Cp nht d liu vi MVC


Hc xong bi ny ngi hc s nm c cc ni dung sau. Phng php thao tc d liu vi m hnh dbml. Cch thc lin kt cc thnh phn d liu (model), v giao din (View) ti lp iu khin (Controller). Thc hin kim th ng dng vi ng dng test.

7.1 THM MI D LIU TRONG MVC


7.1.1 Thm cc phng thc d liu vi m hnh dbml Vic thm mt phng thc trong Models\DataClasses.cs thc hin ghi nhn thm mi vo c s d liu Models\DataClasses.cs.
using using using using System; System.Collections.Generic; System.Linq; System.Web;

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

BI 7. Cp nht d liu vi MVC

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); }

BI 7. Cp nht d liu vi MVC

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

BI 7. Cp nht d liu vi MVC

<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>&nbsp;</td> </tr> <tr> <td colspan=2> <input type=submit value=Thm mi sn phm /></td> </tr> </table> </form> </asp:Content>

Ta c kt qu thc thi nh sau:

Hnh 7.1. Mn hnh thm mi sn phm trong MVC

BI 7. Cp nht d liu vi MVC

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.

7.2 SA I D LIU TRONG MVC


Ta cn thay i danh sch hin th sn phm cho php cp nht d liu, nh m ngun sau y:
<%@ Page Title= Language=C# MasterPageFile=~/Views/Shared/Site1.Master Inherits=System.Web.Mvc.ViewPage<BanHang.Views.SanPham.DanhSachSanPham> %> <asp:Content ID=Content1 ContentPlaceHolderID=MainContent runat=server> <h1>y l danh sch sn phm c trong chuyn mc</h1> <p> <ul> <% foreach (var sp in ViewBag.Model) { %> <li> <%= Html.ActionLink(sp.TenSanPham , ChiTietSanPham/ + sp.Id, SanPham) %> (<%= Html.ActionLink(Edit , CapNhatSanPham/ + sp.Id, SanPham) %>) </li> <% } %> </ul> </p> <p> <form action=../ThemMoiSanPham method=post> <input type=submit value=Thm mi mt sn phm /> </form> </p> </asp:Content>

Giao din hin th danh sch sn phm c thay i:

82

BI 7. Cp nht d liu vi MVC

Hnh 7.2. Danh sch sn phm c thay i

Sau ta thm 2 phng thc CapNhatSanPham v Update trong lp Controllers\SanPhamController.cs nh sau:


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

BI 7. Cp nht d liu vi MVC

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

BI 7. Cp nht d liu vi MVC

return View(); } public ActionResult Update() { return RedirectToAction(DanhMucLoaiSanPham); } } }

Trong lp Controllers

\SanPhamController.cs ta t con tr chut bn cnh

phng thc CapNhatSanPham, bm phi chut chon Add View.

Hnh 7.3. Thm mi view cho phng thc CapNhatSanPham

BI 7. Cp nht d liu vi MVC

85

Hnh 7.4 To view CapNhatSanPham t controller CapNhatSanPham

Khi to xong, ta c kt qu Views\SanPham\CapNhatSanPham.aspx nh sau:

86

BI 7. Cp nht d liu vi MVC

Hnh 7.5. M ngun ca tp tin CapNhatSanPham.aspx

BI 7. Cp nht d liu vi MVC

87

7.3 QUY TRNH KIM TRA TRONG NG DNG MVC


Ta c 3 kiu kim tra mc m ngun (kim tra n v, unit test) trong ng dng ASP.NET MVC c dng kim th cc controllers c xy 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, chng trnh xy dng sn mt d n kim tra (project test).

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

BI 7. Cp nht d liu vi MVC

Hnh 7.7. Thao tc thm lp kim th cho controller Ta xt lp Controllers\SanPhamController.cs nh sau:


using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using 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 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);

BI 7. Cp nht d liu vi MVC

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); } } }

Sau ta nh du vo phng thc cn c kim th.

90

BI 7. Cp nht d liu vi MVC

Hnh 7.8. Bng Chn phng thc cn kim th y l m ngun ca BanHang.Tests\Controllers\SanPhamControllerTest.cs


using using using using BanHang.Controllers; Microsoft.VisualStudio.TestTools.UnitTesting; Microsoft.VisualStudio.TestTools.UnitTesting.Web; System.Web.Mvc;

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 {

BI 7. Cp nht d liu vi MVC

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

BI 7. Cp nht d liu vi MVC

Hnh 7.9. Cch thc hin cc phng thc kim th

Hnh 7.10. Kt qu thc hin kim th DetailViewTest

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

BI 7. Cp nht d liu vi MVC

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

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC


Hc xong bi ny ngi hc s nm c cc ni dung sau. Phng php xc thc ngi dng vi ASP.NET Membership. Cch thc cu hnh xc thc ngi dng.

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

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

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:

Hnh 8.2. To ngi dng s dng cng c ca ASP.NET MVC

96

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

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.

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

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

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

Hnh 8.5. To role cho ngi dng Tip theo to mt ngi dng mi kt hp vi role c.

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

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

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

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

NhomNguoiDung.aspx dnh cho nhm ngi dng thuc roles Administrators.

Hnh 8.7 Cc Views tng ng vi TinTucController.cs

Ta

thm

mt

tab

Tin

Tc

bng

cch

to

mt

Html.ActionLink

trong

Views\Shared\Site.Master.

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

101

Hnh 8.8. Views Index trong Controllers\TinTucController.cs

8.2 CU HNH VIC XC TH C NG I D NG


Thng tin v ngi dng v quyn truy nhp cho nhm ngi dng c lu trong c s d liu. Trong v d ny thng tin c lu tr trong mt c s d liu SQL Express (RAUN) tn l ASPNETDB.mdf, trong folder App_Data ca ng dng MVC. C s d liu ASPNETDB.mdf c sinh t ng bi ASP.NET Framework khi s dng membership. Mc nh ASPNETDB.mdf b n, vo Solution Explorer, chn Show All Files s thy ASPNETDB.mdf nm cng vi Database.mdf dng mt th mc App_Data.

102

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

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:

Thm mt i tng c s d liu Application Services trong h qun tr c s d

liu (SQL Server)

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.

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

103

Trong tp tin web.config, ta s dng ASPNETDB.MDF mc nh lu thng tin ngi dng.


<connectionStrings> <add name=ApplicationServices connectionString=data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true providerName=System.Data.SqlClient/> </connectionStrings> <!--Sa i web.config s dng c s d liu BanHang trong SQ Server lu thng tin ngi dng.--> <connectionStrings> <add name=ApplicationServices connectionString=Data Source=HUNTERXX\SQL2005;Initial Catalog=BanHang;User ID=sa;Password=abc@123; providerName=System.Data.SqlClient /> </connectionStrings>

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

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

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

Hnh 8.12. Thit lp roles cho ti khon ng nhp c s d liu

TM TT

BI 8. TH C HIN B O MT CHO NG DNG ASP.NE T MVC

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 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

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).

BI 8. TH C HIN B O MT CHO NG DNG ASP.NET MVC

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

You might also like