Upload
zoner-software-as
View
255
Download
12
Embed Size (px)
DESCRIPTION
ASP.NET 4 a C# 2010, kniha 1
Citation preview
E N C Y K L O P E D I E Z O N E R P R E S S
TVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLNTVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLN
KNIHAKNIHA 11
KNIHA
1
TVOR
BA DYN
AMICKÝ
CH STR
ÁNEK PROFESION
ÁLN
ASP.NET 4 ASP.NET 4 a C# 2010a C# 2010
ASP.NET 4 a C# 2010
M a t t h e w M a c D o n a l d A d a m F r e e m a n A d a m F r e e m a n
M a r i o S z p u s z t aM a r i o S z p u s z t a
M t t h M DM t t h M D
KNIHA 1
Matthew MacDonald, Adam Freeman, Mario Szpuszta
ASP.NET 4 a C# 2010tvorba dynamických stránek
profesionálně, kniha 1
Pro ASP.NET in C# 2010, Fourth EditionMatthew MacDonald, Adam Freeman a Mario Szpuszta
Original edition copyright © 2010 by Matthew MacDonald, Adam Freeman, and Mario Szpuszta. Czech edition copyright © 2011 by ZONER software, a.s. All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright the publisher.
Copyright originálního vydání © 2010 Matthew MacDonald, Adam Freeman a Mario Szpuszta. Copyright českého vydání © 2011 ZONER software, a.s.. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována nebo předávána žádnou formou nebo způsobem, elektronicky ani mechanicky, včetně fotokopií, natáčení ani žádnými jinými systémy pro ukládání bez výslovného svolení držitele autorských práv.
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně, kniha 1Autor: Matthew MacDonald, Adam Freeman, Mario Szpuszta
Copyright © ZONER software, a.s. Vydání první v roce 2011. Všechna práva vyhrazena.
Zoner PressKatalogové číslo: ZR1003
ZONER software, a.s.Nové sady 18, 602 00 Brno
Překlad: RNDr. Jan PokornýOdpovědný redaktor: Miroslav KučeraŠéfredaktor: Ing. Pavel KristiánDTP: Miroslav Kučera, obálka: Lenka Křížová
Zdrojové soubory ke knize: http://zonerpress.cz/download/aspnet4-a-c2010.zip
Bonusové kapitoly:http://www.zonerpress.cz/download/bonusove-kapitoly-aspnet.zip
Informace, které jsou v této knize zveřejněny, mohou byt chráněny jako patent. Jména produktů byla uvedena bez záruky jejich volného použití. Při tvorbě textů a vyobrazení bylo sice postupováno s maximální péčí, ale přesto nelze zcela vyloučit možnost výskytu chyb. Vydavatelé a autoři nepřebírají právní odpovědnost ani žádnou jinou záruku za použití chybných údajů a z toho vyplývajících důsledků. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována ani dis-tribuována žádným způsobem ani prostředkem, ani reprodukována v databázi či na jiném záznamovém prostředku či v jiném systému bez výslovného svolení vydavatele, s výjimkou zveřejnění krátkých částí textu pro potřeby recenzí.
Veškeré dotazy týkající se distribuce směřujte na:
Zoner Press ZONER software, a.s Nové sady 18, 602 00 Brno
tel.: 532 190 883 e-mail: [email protected] www.zonerpress.cz
ISBN 978-80-7413-131-8
5
Obsah O autorech 18
O odborných korektorech 18
Úvod 19
Rozdělení knihy 19
Komu je tato kniha určena? 21
Co potřebujete, abyste mohli pracovat s touto knihou? 21
Sdělte nám svůj názor 21
Zdrojové kódy 22
Bonusové kapitoly 22
Část I – Základy ASP.NET 23
Kapitola 1 Úvod do ASP.NET 25
Sedm pilířů ASP.NET 25
První pilíř: ASP.NET je integrováno s .NET Frameworkem 25
Druhý pilíř: ASP.NET se neinterpretuje, ale kompiluje 26
Třetí pilíř: ASP.NET je vícejazyčné 28
Čtvrtý pilíř: ASP.NET běží uvnitř společného runtime jazyků 30
Pátý pilíř: ASP.NET je objektově orientované 30
Šestý pilíř: ASP.NET podporuje všechny prohlížeče 33
Sedmý pilíř: ASP.NET se snadno nasazuje a konfi guruje 33
Evoluce ASP.NET 34
ASP.NET 1.0 a 1.1 34
ASP.NET 2.0 34
ASP.NET 3.5 35
ASP.NET 4 38
Silverlight 41
Shrnutí 41
Kapitola 2 Visual Studio 43
Úvod do Visual Studia 44
Weby a webové projekty 45
Vytvoření webu bez projektu 45
Navrhování webové stránky 50
6
Integrované vývojové rozhraní Visual Studia 56
Průzkumník řešení 58
Okno dokumentu 60
Toolbox 60
Seznam chyb a seznam úkolů 61
Průzkumník serveru 62
Editor kódu 64
Přidání referencí na assembly 65
IntelliSense a osnova 68
Vylepšení ve Visual Studiu 2010 70
Model vytváření kódu 76
Jak se soubory kódu v pozadí připojují ke stránkám 78
Jak se připojují značky ovládacích prvků k proměnným stránky 79
Jak se připojují události k obsluhám událostí 81
Webové projekty 82
Vývoj založený na projektu 83
Vytvoření webového projektu 84
Migrace webu z předchozí verze Visual Studia 85
Ladění ve Visual Studiu 87
Ladění po krocích 88
Sledování proměnných 91
Pokročilé body přerušení 92
Web Development Helper 93
Shrnutí 95
Kapitola 3 Webové formuláře 97
Zpracování stránky 98
HTML formuláře 98
Dynamická uživatelská rozhraní 100
Událostní model ASP.NET 101
Automatické odesílání na server 102
Stav zobrazení 104
Soulad s XHTML 108
ID ovládacích prvků na straně klienta 114
Etapy zpracování webového formuláře 117
Inicializace frameworku stránky 118
Inicializace uživatelského kódu 118
7
Validace 119
Zpracování událostí 119
Automatické vázání dat 120
Úklid 120
Ukázka toku zpracování stránky 120
Stránka jako kontejner ovládacích prvků 123
Zobrazení stromu ovládacích prvků 123
Záhlaví stránky 128
Dynamické vytváření ovládacích prvků 129
Třída Page 131
Objekty Session, Application a Cache 131
Objekt Request 132
Objekt Response 133
Objekt Server 137
Objekt User 139
Objekt Trace 139
Přístup ke kontextu HTTP v jiné třídě 145
Shrnutí 146
Kapitola 4 Serverové ovládací prvky 147
Typy serverových ovládacích prvků 147
Hierarchie serverového ovládacího prvku 149
Serverové ovládací prvky HTML 150
Třída HtmlControl 151
Třída HtmlContainerControl 151
Třída HtmlInputControl 152
Třídy serverových ovládacích prvků HTML 152
Nastavování atributů stylu a jiných vlastností 154
Vytváření serverových ovládacích prvků programátorsky 155
Obsluha událostí na straně serveru 157
Webové ovládací prvky 160
Základní třída WebControl 161
Základní třídy webových ovládacích prvků 162
Jednotky 165
Výčtové hodnoty 165
Barvy 166
Písma 166
8
Focus 168
Výchozí tlačítko 169
Panely s rolováním 170
Obsluha událostí webových ovládacích prvků 171
Ovládací prvky pro seznamy 173
Ovládací prvky seznamů, z nichž lze vybírat 175
Ovládací prvek BulletedList 178
Ovládací prvky pro validaci vstupů 179
Validační ovládací prvky 180
Validační proces 181
Třída BaseValidator 182
Ovládací prvek RequiredFieldValidator 184
Ovládací prvek RangeValidator 184
Ovládací prvek CompareValidator 185
Ovládací prvek RegularExpressionValidator 185
Ovládací prvek CustomValidator 188
Ovládací prvek ValidationSummary 190
Programátorské využívání validátorů 191
Validační skupiny 192
Bohatě vybavené ovládací prvky ASP.NET 194
Ovládací prvek AdRotator 195
Ovládací prvek Calendar 197
Shrnutí 199
Kapitola 5 Aplikace ASP.NET 201
Anatomie aplikace ASP.NET 201
Aplikační doména 202
Doba života aplikace 203
Aktualizace aplikací 204
Struktura adresáře aplikace 204
Aplikační soubor global.asax 205
Aplikační události 207
Ukázka aplikačních událostí 209
Konfi gurace ASP.NET 210
Soubor machine.confi g 210
Soubor web.confi g 213
Nastavení <system.web> 217
9
<system.webServer> 218
<appSettings> 218
<connectionStrings> 220
Programátorské čtení a zápis konfi guračních nastavení 221
Nástroj WAT (Website Administration Tool) 223
Rozšiřování struktury konfi guračního souboru 225
Šifrování konfi guračních sekcí 229
Komponenty .NET 230
Vytvoření komponenty 231
Test komponenty prostřednictvím adresáře App_Code 233
Test komponenty prostřednictvím adresáře Bin 234
Rozšiřování kanálu HTTP 236
Obslužné rutiny HTTP 236
Vytvoření vlastní obslužné rutiny HTTP 238
Konfi gurace vlastní obslužné rutiny HTTP 239
Obslužné rutiny HTTP bez konfi gurování 240
Vytvoření pokročilejší obslužné rutiny HTTP 241
Vytvoření obslužné rutiny HTTP pro obsah, který není HTML 243
HTTP Moduly 246
Vytvoření vlastního modulu HTTP 248
Shrnutí 250
Kapitola 6 Správa stavu 251
Správa stavu ASP.NET 252
Stav zobrazení 254
Ukázka práce se stavem zobrazení 255
Ukládání objektů do stavu zobrazení 257
Posouzení stavu zobrazení 259
Selektivní vypínání stavu zobrazení 260
Bezpečnost stavu zobrazení 262
Přenášení informací mezi stránkami 263
Dotazovací řetězec 264
Odesílání stránky na server přes jinou stránku 266
Cookies 273
Stav relace 274
Architektura relace 274
Práce se stavem relace 276
10
Konfi gurování stavu relace 277
Zabezpečení stavu relace 284
Stav aplikace 285
Statické proměnné aplikace 287
Shrnutí 289
Část II – Přístup k datům 291
Kapitola 7 Základy ADO.NET 293
Architektura ADO.NET 294
Zprostředkovatelé dat ADO.NET 294
Standardizace v ADO.NET 296
Základní třídy ADO.NET 297
Třídy připojení 298
Připojovací řetězce 298
Testování připojení 301
Fond připojení 303
Třídy příkazů a čtenářů dat 305
Základní informace o třídách příkazů 305
Třídy čtenářů dat 306
Metoda ExecuteReader() a čtenář dat 307
Metoda ExecuteScalar() 313
Metoda ExecuteNonQuery() 314
Útoky injektáží SQL 314
Práce s parametrizovanými příkazy 317
Volání uložených procedur 319
Transakce 321
Transakce a aplikace ASP.NET 322
Úrovně izolace 327
Záchytné body 329
Kód nedogmatický vzhledem ke zprostředkovatelům 330
Vytvoření továrny na objekty 330
Vytváření objektů v továrně 332
Dotaz s kódem nedogmatickým vůči zprostředkovatelům 332
Shrnutí 334
11
Kapitola 8 Datové komponenty a sada dat 335
Budování komponenty pro přístup k datům 335
Datová třída 337
Uložené procedury 338
Třída přístupu k datům (databázové utility) 339
Testování databázové komponenty 346
Odpojená data 349
Webové aplikace a sada dat 350
Integrace XML 351
Sada dat 351
Datové adaptéry 352
Plnění sady dat 354
Práce s více tabulkami najednou a relace 355
Vyhledávání konkrétních řádků 358
Použití sady dat ve vlastní třídě pro přístup k datům 359
Vázání dat 360
Datový pohled 361
Řazení s datovým pohledem 361
Filtrování s datovým pohledem 363
Pokročilé fi ltrování s relacemi 365
Vypočítané sloupce 366
Shrnutí 368
Kapitola 9 Vázání dat 369
Základy vázání dat 370
Jednoduché vázání dat 370
Další typy vázacích výrazů 373
Složené vázání dat 377
Ovládací prvky pro zdroje dat 385
Životní cyklus stránky s vázáním dat 385
Ovládací prvek SqlDataSource 386
Výběr záznamů 387
Parametrizované příkazy 390
Zpracování chyb 395
Aktualizace záznamů 396
12
Odstraňování záznamů 400
Vkládání záznamů 401
Nevýhody ovládacího prvku SqlDataSource 401
Ovládací prvek ObjectDataSource 402
Výběr záznamů 403
Aktualizace záznamů 408
Aktualizace pomocí datového objektu 409
Limity ovládacích prvků pro zdroje dat 413
Specifi kace problému 413
Přidání dalších položek do seznamu 414
Zpracování dodatečných voleb s SqlDataSource 415
Zpracování dodatečných voleb s ObjectDataSource 416
Shrnutí 416
Kapitola 10 Bohatě vybavené datové ovládací prvky 417
Ovládací prvek GridView 418
Defi nice sloupců 418
Formátování GridView 422
Formátování sloupců vázaných na data 422
Styly 424
Formátování pouze některých hodnot 428
Výběr řádků v GridView 430
Výběr ve formuláři typu hlavní záznam-sdružené záznamy 431
Událost SelectedIndexChanged 433
Datový sloupec v podobě výběrových tlačítek 434
Řazení a GridView 435
Řazení s SqlDataSource 435
Řazení s ObjectDataSource 436
Řazení a výběr 438
Složitější řazení 438
Stránkování a GridView 440
Automatické stránkování 440
Stránkování a výběr 442
Vlastní stránkování s ObjectDataSource 442
Přizpůsobení pruhu se stránkovacími ovládacími prvky 445
Šablony a GridView 446
Použití několika šablon 449
13
Editace šablon ve Visual Studiu 449
Vázání k metodě 450
Obsluha událostí v šabloně 451
Editace se šablonou 453
Klientská ID v šablonách 459
Ovládací prvek ListView 460
Skupiny v ListView 463
Stránkování 465
Ovládací prvky DetailsView a FormView 466
Ovládací prvek DetailsView 466
FormView 469
Pokročilé mřížky 471
Souhrny v GridView 471
Zobrazení rodič/potomek v jediné tabulce 473
Editace pole pomocí vyhledávací tabulky 475
Získávání obrázků z databáze 478
Detekce konfl iktů při souběžném zpracování 484
Shrnutí 489
Kapitola 11 Cachování a asynchronní stránky 491
Cachování v ASP.NET 492
Cachování výstupu 492
Deklarativní cachování výstupu 493
Cachování a dotazovací řetězec 494
Cachování s konkrétními parametry dotazovacího řetězce 495
Vlastní technika cachování 496
Cachování s třídou HttpCachePolicy 497
Cachování fragmentu a nahrazení po uložení do cache 498
Profi ly cache 501
Konfi gurace cache 502
Rozšiřitelnost cachování výstupu 502
Cachování dat 508
Přidávání prvků do kolekce Cache 508
Jednoduchý test cache 511
Priority cache 512
Cachování s ovládacími prvky zdrojů dat 513
Závislosti cache 516
14
Závislosti na souboru a na prvku cache 517
Souhrnné závislosti 518
Zpětné volání při odstranění prvku z cache 519
Notifi kace SQL do cache 521
Jak pracují notifi kace 522
Zapnutí notifi kací 523
Vytvoření závislosti cache 524
Vlastní závislosti cache 525
Jednoduchá ukázka vlastní závislosti cache 525
Vlastní závislost cache používající fronty zpráv 526
Asynchronní stránky 529
Vytvoření asynchronní stránky 530
Dotazy na data v asynchronní stránce 532
Zpracování chyb 534
Cachování v asynchronních úlohách 537
Vícenásobné asynchronní úlohy a časové limity 540
Shrnutí 541
Kapitola 12 Soubory a proudy 543
Práce se systémem souborů 543
Třídy Directory a File 544
Třídy DirectoryInfo a FileInfo 547
Třída DriveInfo 549
Práce s atributy 550
Filtrování souborů se zástupnými symboly 552
Získávání informací o verzi souboru 553
Třída Path 554
Prohlížeč souborů 556
Čtení a zápis souborů pomocí proudů 561
Textové soubory 563
Binární soubory 565
Nahrávání souborů na server 566
Soubor zajištěný pro bezpečný simultánní přístup 568
Komprimace 573
Serializace 574
Shrnutí 577
15
Kapitola 13 LINQ 579
Základy LINQ 580
Odložené vykonávání 581
Jak LINQ pracuje 582
Výrazy LINQ 583
Výrazy LINQ pod kapotou 590
LINQ to DataSet 593
Typové sady dat 596
Hodnoty Null 596
LINQ to Entities 596
Generování datového modelu 597
Třídy datového modelu 598
Relace entit 601
Dotazy na uložené procedury 602
Dotazy LINQ to Entities "pod kapotou" 604
Databázové operace 611
Vkládání 611
Aktualizace 614
Odstraňování 614
Souběžné zpracování 615
Zpracování konfl iktů při souběžném zpracování 616
Ovládací prvek EntityDataSource 621
Zobrazování dat 621
Získávání dat spojených relacemi 625
Editace dat 626
Validace 627
Ovládací prvek QueryExtender 629
Filtr SearchExpression 629
Filtr RangeExpression 631
Filtr PropertyExpression 631
Filtr MethodExpression 632
Shrnutí 633
Kapitola 14 XML 635
Kdy je rozumné používat XML? 635
Úvod do XML 636
16
Přednosti XML 637
Správně strukturované XML 638
Jmenné prostory XML 639
Schémata XML 641
Zpracování XML založené na proudech 642
Zápis souborů XML 643
Čtení souborů XML 646
Zpracování XML v paměti 650
Třída XmlDocument 650
Třída XPathNavigator 654
Třída XDocument 656
Vyhledávání obsahu XML 662
Vyhledávání s XmlDocument 662
Prohledávání dokumentu XML s XPath 665
Prohledávání XDocument s LINQ 667
Validace souborů XML 669
Základní schéma 669
Validace s XmlDocument 670
Validace s XDocument 672
Transformace obsahu XML 672
Základní stylový předpis 673
Práce s XslCompiledTransform 674
Práce s ovládacím prvkem Xml 676
Transformace XML s LINQ to XML 676
Vázání dat XML 678
Vázání, které není hierarchické 679
Výrazy XPath 681
Vnořené mřížky 683
Hierarchické vázání s TreeView 685
Práce s XSLT 687
Vázání k obsahu XML z jiných zdrojů 689
Aktualizace XML prostřednictvím XmlDataSource 690
XML a sada dat ADO.NET 690
Převod sady dat do XML 691
Přístup k sadě dat jako k XML 693
Shrnutí 695
17
Číst III – Budování webů ASP.NET 697
Kapitola 15 Uživatelské ovládací prvky 699
Základy uživatelského ovládacího prvku 700
Vytvoření prostého uživatelského ovládacího prvku 700
Převod stránky na uživatelský ovládací prvek 702
Přidávání kódu do uživatelského ovládacího prvku 703
Obsluha událostí 703
Přidávání vlastností 704
Práce s vlastními objekty 706
Přidávání událostí 709
Vystavení vnitřku webového ovládacího prvku 713
Dynamicky načítané uživatelské ovládací prvky 714
Frameworky portálů 715
Ukládání částí stránky do cache 718
Vlastnost VaryByControl 719
Sdílení ovládacích prvků ukládaných do cache 721
Shrnutí 721
Kapitola 16 Motivy a vzory stránek 723
Kaskádové stylové předpisy (CSS) 723
Vytvoření stylového předpisu 724
Aplikování stylových pravidel 726
Motivy 729
Složky motivu a skinové předpisy 730
Aplikování jednoduchého motivu 731
Zpracování konfl iktů souvisejících s motivem 732
Vytvoření více skinů pro jeden ovládací prvek 733
Skiny se šablonami a obrázky 734
Aplikování stylového předpisu v motivu 737
Aplikování motivů prostřednictvím konfi guračního souboru 737
Aplikování motivů dynamicky 738
Standardizace layoutu webu 740
Základní informace o vzoru stránek 741
Jednoduchý vzor stránek 742
Jednoduchá obsahová stránka 744
18
Výchozí obsah 746
Vzory stránek a layout s tabulkami nebo s CSS 746
Vzory stránek a relativní cesty 749
Aplikování vzorů stránek prostřednictvím konfi guračního souboru 750
Pokročilé vzory stránek 751
Interakce s třídou vzoru stránek 751
Dynamické nastavení vzoru stránek 752
Vnořování vzorů stránek 753
Shrnutí 755
Kapitola 17 Navigace po webu 757
Stránky s více zobrazeními 758
Ovládací prvek MultiView 759
Ovládací prvek Wizard 763
Mapa webu 772
Defi nice mapy webu 772
Vázání k mapě webu 774
Navigační cesta 776
Zobrazení části mapy webu 778
Objekty mapy webu 782
Přidávání vlastních informací do mapy webu 783
Tvorba vlastního zprostředkovatele mapy webu 784
Personalizované mapy webu 791
Mapování a směrování URL 793
Mapování URL 793
Směrování URL 794
Ovládací prvek TreeView 796
Objekty TreeNode 797
Plnění uzlů na požádání 799
Styly TreeView 801
Ovládací prvek Menu 805
Styly pro ovládací prvek Menu 808
Šablony ovládacího prvku Menu 810
Shrnutí 812
19
Kapitola 18 Nasazování webů 813
Instalace a konfi gurace IIS 813
Instalace IIS 7 814
Správa IIS 7 815
Jak na nasazení webu 817
Nasazení kopírováním souborů 818
Nasazení s nástrojem Web Deployment 822
Nasazení přes FTP 832
Správa webu 838
Vytvoření nového webu 838
Vytváření virtuálních adresářů 839
Třída VirtualPathProvider 840
Fondy aplikací 844
Zahřívací kolo pro aplikace 847
Rozšíření integrovaného kanálu 848
Vytvoření obslužné rutiny 848
Nasazení obslužné rutiny 849
Konfi gurace obslužné rutiny 849
Otestování obslužné rutiny 851
Shrnutí 851
Rejstřík 853
20
MARIO SZPUSZTA pracuje jako architekt ve skupině Developer and Platform Group společnosti Microsoft v Rakousku a pomáhá softwarovým architektům nej-větších podniků a webovým zákazníkům se zaváděním nových technologií Micro-softu. Několik let se specializoval na vývoj bezpečného softwaru, webové služby a na integraci klientů a serverů Microsoft Office do zákaznických aplikací.
Mario pravidelně přednáší na místních a mezinárodních konferencích, jako např. DevDays a TechEd Europe Developers. V posledních dvou letech byl držitelem tech-nického obsahu TechEd Europe Developers.
O autorechMATTHEW MACDONALD je autor, pedagog a Microsoft MVP. Přispívá do ča-sopisů o programování a je autorem více než tuctu knih o programování .NET, na-příklad Pro Silverlight 3 in C# (Apress, 2009), Pro WPF in C# 2010 (Apress, 2010) a Beginning ASP.NET 4 in C# 2010 (Apress, 2010). V šerém dávnověku svého života studoval anglickou literaturu a teoretickou fyziku.
V současnosti žije v Torontu se svou ženou a dcerou.
ADAM FREEMAN je zkušený odborník v oblasti IT, který zastával vedoucí pozice v mnoha společnostech, naposledy jako CTO (chief technology officer) a COO (chi-ef operating officer) v jisté bankovní společnosti s celosvětovou působností.
Napsal několik knih o Javě a technologii .NET
O odborných korektorechFabio Claudio Ferracchiati je plodný spisovatel se zaměřením na technologie. Fabio spolupracoval na více než tuctu knih o .NET, C#, Visual Basicu a ASP.NET. Je držitelem MCSD (Microsoft Certified Solution Deve-loper) pro .NET a žije v Římě. Jeho blog naleznete na adrese http://www.ferracchiati.com.
Todd Meister pracuje s technologiemi Microsoftu více než deset let. Jako technický redaktor se podílel na vy-dání více než padesáti knih tématicky sahajících od SQL Serveru až k .NET Frameworku. Se svou manželkou Kimberly a čtyřmi fantastickými dětmi žije v centrální Indianě.
21
ÚvodKdyž se poprvé objevilo .NET, byla to malá lavina nových technologií. Najednou tu byl zcela nový způsob, jak psát webové aplikace (ASP.NET), zcela nový způsob, jak se připojovat k databázím (ADO.NET), nové, typově bezpečné jazyky (C# a VB .NET) a spravovaný runtime (CLR). Významnou novou technologií byly také for-muláře Windows (Windows Forms), knihovna tříd pro budování aplikací Windows.
Jak již bezpochyby víte, ASP.NET je nová generace technologií Microsoftu pro vytváření webových aplikací běžících na straně serveru. Je postavena na Microsoft .NET Frameworku, který je seskupením úzce souvi-sejících nových technologií, které přináší kompletní revoluci: od přístupu do databáze až po distribuované aplikace. ASP.NET je jednou z nejdůležitějších komponent .NET Frameworku – jedná se totiž o část, která vám umožní vyvíjet velmi výkonné webové aplikace.
ASP.NET nemá problémy se získáním zájmu programátorů. Bez nadsázky můžeme říci, že ASP.NET je nej-kompletnější platformou pro vývoj webu, která kdy byla sestavena. Převyšuje svého předchůdce ASP, kte-ré bylo navrženo jako "quick-and-dirty" sada nástrojů pro vkládání dynamického obsahu na běžné webové stránky. Oproti němu je ASP.NET plnohodnotnou platformou pro vývoj komplexních a velmi rychlých we-bových aplikací.
V této knize se naučíte všechno, co potřebujete ke zvládnutí ASP.NET 4. Pokud jste již programovali v před-chozí verzi ASP.NET, můžete se zaměřit výhradně na nové funkce, mezi něž patří ASP.NET MVC (kapitola 32), ASP.NET Dynamic Data (kapitola 33) a Silverlight (kapitola 34). Všechny tyto kapitoly naleznete ve dru-hém dílu této knihy. Pokud jste nikdy v ASP.NET neprogramovali, zjistíte, že tato kniha poskytuje vhodné tempo výuky, při níž projdete všechny základní věci, které potřebujete znát. Rovněž se podíváte na to, co se děje na pozadí a jak ASP.NET interně funguje. Jediným požadavkem pro zvládnutí problematiky této knihy je obstojná znalost jazyka C# a základů .NET. Pokud patříte k vývojářům migrujícím z jazyka Java nebo C++, takže C# je pro vás novinkou, možná bude lepší začít s nějakou knihou, která se věnuje základům .NET, nap-příklad s knihou Pro C# 2010 and .NET 4 Platform od Andrewa Troelsena (Apress, 2010).
Rozdělení knihyVydavatelství Zoner Press v uplynulých letech vydalo několik knih popisujících problematiku ASP.NET a C#, například ASP.NET 3.5 a C# 2008 – tvorba dynamických stránek profesionálně, která vyšla v roce 2008, nebo ASP.NET 2.0 a C# – tvorba dynamických stránek profesionálně z roku 2006. Protože se ale jednalo o knihy, které se snažily pokud možno co nejvíce obsáhnout problematiku ASP.NET a C#, nepříznivě se to projevilo na velkém počtu stran těchto knih – který se blížil k číslu 1 600 – což znesnadňovalo jejich každodenní použí-vání ve vývojářské praxi. Další vydání, tentokrát s názvem ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně proto bylo z praktických důvodů rozděleno do dvou samostatných knih (dílů). V knize 1, kterou právě držíte v ruce, se věnujeme základům ASP.NET, přístupu k datům a budování webů ASP.NET. Kniha 2 se pak věnuje pokročilejším záležitostem, jako je bezpečnost, pokročilé uživatelské rozhraní a nové technologie zahrnuté do ASP.NET (jako je ASP.NET MVC, Silverlight a ASP.NET Dynamic Data).
Kniha 1 obsahuje tato témata:
• Část I – Základy ASP.NET. V kapitole 1 začneme stručným pohledem na celou platformu ASP.NET, .NET Framework a uvedeme si přehled změn, k nimž došlo v ASP.NET 4. V kapitole 2 se pustíte do zvládání svých "nezbytných prostředků k obživě" – zde jmenovitě Visual Studia 2010. V kapitolách 3, 4, 5 a 6 zvládnete klíčové části infrastruktury ASP.NET, například model webové stránky, konfigura-ci aplikace a správu stavu. Jakmile ovládnete tyto základy, podíváme se na to, jak ASP.NET zpracovává
22
požadavky a spravuje dobu života webových aplikací. Rovněž se dozvíte, jak rozšířit architekturu ASP.NET.
• Část II – Přístup k datům. V této části se budeme věnovat oblasti nezbytné pro vývoj veškerého soft-waru, což je přístup a manipulace s daty. V kapitolách 7 a 8 si popíšeme základy ADO.NET a naučíme se navrhovat komponenty pro přístup k datům. V kapitolách 9 a 10 naleznete informace o sadě inova-tivních ovládacích prvků pro vázání dat ASP.NET. Tyto prvky vám umožní naformátovat a zobrazovat data bez nutnosti psát vlastní kód. Kapitola 11 vás zavede k pokročilým strategiím ukládání do cache, což je funkcionalita, která zajišťuje vysoký výkon. Kapitoly 12, 13 a 14 vás přenesou mimo svět ADO.NET, protože si ukážeme, jak pracovat se soubory, s technologií LINQ a obsahem XML.
• Část III – Budování webů ASP.NET. Třetí a poslední část knihy 1 se věnuje základních technikách a funkcionalitách určeným pro správu skupin webových stránek. V kapitole 15 začnete pracovat s uživatelskými ovládacími prvky, které vám umožní opětovně používat části uživatelského rozhraní. V kapitole 16 probereme motivy (které slouží pro automatickou stylizaci ovládacích prvků) a vzory stránek (které jsou určeny pro opětovné použití vaší designové šablony na více webových stránkách). V kapitole 17 si ukážeme, jakým způsobem používat navigační model ASP.NET, aby návštěvníci mohli přecházet z jedné stránky vašeho webu na jinou. V kapitole 18 si pak podrobně popíšeme nasazování aplikací a software webového serveru IIS.
Kniha 2 obsahuje tato témata:
• Část IV – Bezpečnost. Kniha 2 bezprostředně navazuje na knihu 1. Začíná čtvrtou částí, kde se po-díváte na bohatou sadu funkcionalit vztahujících se k zabezpečení ASP.NET. V kapitole 19 začneme s celkovým přehledem principů zabezpečení. Poté se společně podíváme na ověřování založené na for-mulářích (kapitola 20) a funkcionalitu členství, která s ní spolupracuje (kapitola 21). V kapitole 22 se budeme věnovat ověřování systému Windows a v kapitole 23 se naučíte, jak omezit ověřené uživate-le prostřednictvím autorizačních pravidel a jakým způsobem používat zabezpečení na základě rolí. V kapitole 24 prozkoumáte funkcionalitu profilů – což je předem zhotovené řešení určené k ukládání informací specifických pro uživatele. S využitím informací z kapitoly 25 se naučíte šifrováním chránit nejenom data, která ukládáte do databáze, ale také informace, které zasíláte prostřednictvím URL ad-resy. V kapitole 26 vám poté ukážeme, jakým způsobem se můžete zapojit do bezpečnostního modelu ASP.NET vytvořením vlastního zprostředkovatele členství.
• Část V – Pokročilé uživatelské rozhraní. V této části si předvedeme, jakým způsobem lze rozšířit vaše webové stránky o různě pokročilé techniky. V kapitole 27 se podíváme na vlastní ovládací prvky. V kapitole 28 odbočíme k problematice GDI+ a ručně vytvářené grafiky. V kapitolách 29 a 30 bude-me rozvažovat o tom, jak technikami JavaScriptu a Ajaxu učinit webové stránky dynamičtější (tím, že do nich včleníme takové efekty jako automatické dokončování textu a přetahování myší) a vstřícnější (tím, že budou reagovat na události na straně klienta a plynule aktualizovat webovou stránku). Nako-nec v kapitole 31 detailně prozkoumáme funkcionalitu Web Parts ASP.NET, která vám jednoduchým způsobem umožní vytvářet webové portály.
• Část VI – Nové směry. V této části se budeme zamýšlet nad několika nejvíce vzrušujícími inovacemi v moderním webovém vývoji. V kapitole 32 prozkoumáme ASP.NET MVC, což je nová alternativa ke klasickému modelu webových formulářů, která dává vývojářům kompletní kontrolu nad realizací HTML a nad strukturou URL. V kapitole 33 budete zvažovat ASP.NET Dynamic Data, což je perfektní řešení pro rychlé budování takových aplikací, které se točí okolo prohlížení a editování informací ulo-žených v nějaké databázi. V poslední kapitole této knihy proniknete do kouzelného světa Silverlightu, což je plug-in Microsoftu do prohlížeče, který vám umožňuje rozšířit běžné webové stránky o bohatou grafiku, animace, zvuk a samozřejmě i video pro širokou paletu prohlížečů a operačních systémů.
23
Komu je tato kniha určena?Kniha je zamýšlena jako prvotní zdroj informací pro profesionální vývojáře, kteří mají slušné znalosti o webo-vém vývoji na straně serveru. Kniha neposkytuje vyčerpávající pohled na každou ingredienci nacházející se uvnitř .NET Frameworku – taková kniha by musela mít více než dvojnásobný počet stran. Proto se tato kniha raději zaměřuje na to, aby poskytla inteligentní úvod do ASP.NET pro profesionální programátory, kteří se nepotřebují zdržovat se základy. Průběžně se budete soustřeďovat na různá zákoutí .NET Frameworku, která potřebujete znát, abyste mohli budovat profesionální webové aplikace, mezi něž patří přístup k datům a XML. S těmito schopnostmi budete schopni vytvářet weby nové generace, a to s nejlepšími nástroji, jaké jsou dnes k dispozici.
Kniha je také velmi praktická. Nebudete se učit jen funkce ASP.NET, budete se také učit techniky ze sku-tečného světa, s jejichž pomocí budete moci převést svůj web na vyšší kvalitativní úroveň. Pozdější kapitoly knihy jsou zasvěcené břitkým tématům, jako jsou vlastní ovládací prvky, dynamická tvorba grafiky, pokročilá bezpečnost či vysoký výkon při přístupu k datům. Tohle všechno je potřebné pro vývoj profesionálních we-bových aplikací.
Abyste mohli z této knihy vytěžit co nejvíce, měli byste se dobře vyznat v syntaxi jazyka C# a v pojmech ob-jektově orientovaného programování. Nemusíte mít zkušenosti s předchozí verzí ASP.NET, protože veškeré potřebné věci se v této knize probírají. Pokud jste zkušenými programátory v jazycích Java nebo C++ bez jakýchkoliv zkušeností s .NET, měli byste raději začít s nějakou knihou, která se věnuje základům .NET, na-příklad "Pro C# 2010 and .NET 4 Platform" od Andrewa Troelsena (Apress, 2010).
Co potřebujete, abyste mohli pracovat s touto knihou? Chcete-li vyvíjet a testovat webové aplikace ASP.NET, potřebujete Visual Studio 2010. Přestože teoreticky se dá kód vytvářet ručně, je to nesmírně pracné, a to ani nemluvíme o vysoké pravděpodobnosti vzniku různých chyb. Tento ruční přístup se nikdy nepoužívá v profesionálních kruzích.
Pokud také plánujete hostovat weby ASP.NET, musíte používat nějakou serverovou verzi Windows, např. Windows Server 2003 nebo Windows Server 2008. Rovněž si musíte nainstalovat IIS (Internet Information Services), což je software pro hostování webů. Webový server IIS, který se podrobněji popisuje v kapitole 18, je součástí operačního systému Windows.
Do této knihy je také začleněno několik příkladů, které využívají ukázkové databáze dodávané společně s SQL Serverem, aby bylo možné demonstrovat funkčnost kódu pro přístup k datům, techniky týkající se bezpeč-nosti a jiné funkce. Pro vyzkoušení těchto příkladů můžete používat libovolnou verzi SQL serveru, včetně SQL Server Express, která je součástí některých verzí Visual Studia (a volně ke stažení na stránkách http://msdn.microsoft.com/express/database). Pokud budete používat nějaké jiné relační databáze, pravdě-podobně se neobejdete bez drobných úprav kódu uvedeného v této knize.
Sdělte nám svůj názorJako čtenáři této knihy se stáváte těmi nejdůležitějšími kritiky a komentátory. Vážíme si vašeho názoru a chtě-li bychom vědět, co děláme správně, co bychom mohli dělat lépe, ve kterých oblastech bychom měli publiko-vat, a také bychom chtěli znát vaše další podnětné myšlenky, o které jste ochotni se s námi podělit.
Jako odborný redaktor Zoner Press vítám vaše názory. Můžete mi psát – poslat e-mail nebo dopis – a sdělit mi, co se vám v této knize lí bilo nebo nelíbilo, stejně tak, co bychom měli udělat, aby naše další knihy byly lepší. Pokud mi napíšete, nezapomeňte prosím připojit název knihy, ISBN, jméno autora, vaše jméno, telefon,
24
nebo e-mail. Pozorně zhodnotím vaše názory a poskytnu je autorovi a ostatním redaktorům, kteří pracovali na této knize. Prosím, vězte, že nemohu pomoci s technickými problémy, které se týkají obsahu knihy, a že díky velkému množství e-mailů, které dostávám, nemohu zaručit odpověď na každou zprávu.
E-mail: [email protected] nebo [email protected].
Adresa: ZonerPress, ZONER software, a.s, Miroslav Kučera, Nové sady 18, 602 00 Brno.
Zdrojové kódyZdrojové soubory k této knize je možné stáhnout na této adrese (velikost 14 MB):
http://zonerpress.cz/download/aspnet4-a-c2010.zip
Dále jsou k dispozici ke stažení dvě bonusové kapitoly (velikost 1.4 MB):
http://www.zonerpress.cz/download/bonusove-kapitoly-aspnet.zip
Bonusové kapitolyK této knize jsou k dispozici dvě bonusové kapitoly ve formátu PDF. V těchto kapitolách naleznete obsah, který kvůli technologickým omezením tisku nemohl být zařazen do této knihy. Jedná se o obsah, který není považován za důležitý z hlediska vývoje webu ASP.NET.
POZNÁMKA Tyto bonusové kapitoly pocházejí z předchozích vydání této knihy. Informace z bonusových kapi-tol se ale vztahují i k ASP.NET 4, protože v něm se tyto funkce nezměnily.
Podívejte se, co v nich najdete:
• Bonusová kapitola 1 (Zdroje a lokalizace). V této kapitole se popisuje, jak používat prostředky a lo-kalizace na webech vytvořených s ASP.NET. Jedná se o základní kapitolu pro vývojáře, kteří po třebují vytvořit webové stránky, které mají být k dispozici ve více jazykových variantách.
• Bonusová kapitola 2 (Podpora návrhového režimu). V této kapitole se popisuje, jak můžete do svých vlastních ovládacích prvků přidat podporu návrhového režimu, aby se v prostředí Visual Studia přívě-tivě chovaly, samy zařizovaly serializaci svých vlastností a podporovaly pokročilé návrhářské funkce, jako jsou inteligentní značky.
43
KAPITOLA 2
Visual Studio
S ASP.NET máte na výběr několik možností, jak vyvíjet webové aplikace. Máte-li neo-dolatelnou potřebu (a na množství práce nehledíte), můžete psát kód pro každou we-bovou stránku a třídu ručně v nějakém obyčejném textovém editoru. Ačkoliv takový přístup je až dojemně bezelstný, je dosti pracný a náchylný k chybám, pokud vytváříte cokoliv jiného než nějakou jednoduchou webovou stránku. Profesionální vývojáři ASP.NET se touto cestou vydávají jen výjimečně.
Téměř všechny rozsáhlejší weby ASP.NET se budují pomocí Visual Studia. Je to pro-fesionální vývojářský nástroj, který podporuje komplexní soustavu různých designér-ských nástrojů, včetně legendární sady nástrojů pro ladění, a také IntelliSense, jež při psaní kódu zachytává chyby a nabízí různá doporučení. Visual Studio také podporuje robustní model kódu v pozadí (code-behind), kdy se kód .NET, který píšete, odděluje od značek webové stránky. A aby bylo možné celé toto dílo korunovat, má Visual Stu-dio zabudovaný vlastní webový server, který je určený pro testování, takže vytvořené weby je možné ladit snadno a bez různých zmatků.
V této kapitole podnikneme projížďku po integrovaném vývojovém rozhraní (IDE) Visual Studia a ukážeme si dva způsoby, jak ve Visual Studiu vytvořit webovou aplikaci ASP.NET – buď jako základní web bez podpůrných souborů, nebo jako webový pro-jekt. Dále se také seznámíme s modelem kódu, který se používá pro webové stránky ASP.NET, a s procesem kompilace, který se používá ve webových aplikacích ASP.NET. Nakonec se zběžně podíváte na Web Development Helper, což je ladicí nástroj založe-ný na prohlížeči, který můžete využívat v součinnosti s Visual Studiem.
CO JE NOVÉHO?
Přestože se Visual Studio 2010 drží stejného základního modelu jako dřívější verze, pro-dělalo významný facelifting. A skutečně – Visual Studio 2010 bylo od základu přepsáno pomocí WPF (technologie Microsoftu pro uživatelská rozhraní založená na .NET), jehož výsledkem je čistší, modernější rozhraní. Většina změn spočívá v detailech, jako méně pře-plácaná obrazovka a přímočařejší IntelliSense (viz sekci "Vylepšení Visual Studia 2010"). Ovšem vývojáři pracující s WPF nebo se Silverlightem (kapitola 34) konečně dostávají dlouho očekávaného návrháře, který umožňuje budovat uživatelská rozhraní tak, že pře-tahují a pouštějí ovládací prvky z Toolboxu (stejně jako v nějaké stránce ASP.NET).
Kapitola 2 – Visual Studio44
Úvod do Visual StudiaPsát a kompilovat kód ručně bývá těžkopádné a pracné. Proto IDE Visual Studia nabízí spoustu vysokoú-rovňových funkcí, které zdaleka přesahují základní úroveň správy kódu. Mezi přednosti Visual Studia patří:
• Integrovaný webový server. Abyste mohli hostovat nějakou webovou aplikaci ASP.NET, potřebujete webový server, jako je například IIS, který čeká na webové požadavky a obsluhuje odpovídající strán-ky. Příprava webového serveru je nicméně nepohodlná. Ovšem díky tomu, že je do Visual Studia in-tegrován vývojový webový server, můžete spouštět weby přímo z prostředí vývojářského nástroje. Je to také lepší z hlediska bezpečnosti, protože víte, že žádný externí počítač nemůže spustit váš aktuálně testovaný web. Testovací server totiž akceptuje jen připojení z místního počítače.
• Vývoj ve více jazycích. Visual Studio umožňuje psát kód v jednom nebo několika různých jazycích a přitom používat stále stejné rozhraní (IDE). Visual Studio také umožňuje vytvářet jednotlivé webové stránky v různých jazycích a zařadit je všechny do téže webové aplikace. Existují jen dvě následující omezení: v jedné webové stránce si musíte vystačit s jediným programovacím jazykem (protože jinak by vznikly očividné potíže s kompilací takového kódu) a musíte použít bezprojektový model webu (tj. ne webový projekt).
• Píšete méně kódu. U většiny aplikací je potřeba vytvořit dost velké množství "vaty" v podobě kódu standardní povahy. Webové stránky ASP.NET nejsou v tomto ohledu žádnou výjimkou. Pokud napří-klad přidáte nějaký webový ovládací prvek, připojíte obsluhu událostí a přizpůsobíte formátování, je také potřeba nastavit řadu věcí v kódu stránky. Visual Studio ovšem automaticky nastaví tyto nezbytné podrobnosti za vás.
• Intuitivní styl psaní kódu. Visual Studio standardně formátuje kód už v okamžiku, kdy jej vytváříte, automaticky jej odsazuje a používá různé barvy pro odlišení různých částí kódu, jako jsou třeba ko-mentáře. Tyto zdánlivé drobnosti mají za následek, že je kód mnohem lépe čitelný a méně náchylný k chybám. Můžete si dokonce nakonfigurovat, jaké automatické formátování má Visual Studio použí-vat, což je skvělé, pokud například preferujete jiný styl psaní složených závorek (jakým je například styl K&R, při kterém se otevírací složená závorka vkládá na řádek předchozí deklarace).
TIP Chcete-li se podívat, jaké formátovací volby máte k dispozici, zvolte Tools -> Options a přesvědčte se, že je zaškrtnuto políčko Show All Settings. Pak vyhledejte skupinu formátovacích nastavení Text Editor -> C#. Měli byste vidět několik voleb, které řídí způsob umisťování složených závorek.
• Rychlejší vývoj. Mnohé ze schopností Visual Studia jsou zaměřeny tak, abyste dokázali udělat svou práci ještě rychleji. Funkce týkající se pohodlí umožňují vývojářům pracovat rychle a efektivně. Patří mezi ně IntelliSense (označuje chyby a doporučuje opravy), výkonné vyhledávání a nahrazování (do-káže vylovit klíčová slova nejen z jednoho souboru, ale i z celého projektu) či automatické převádění kódu na komentáře (takže snadno skryjete blok kódu) a zpět.
• Ladění. Nástroje Visual Studia určené pro ladění jsou tím nejlepším způsobem, jak vystopovat mys-teriózní chyby a diagnostikovat podivné chování. Svůj kód můžete vykonávat řádek po řádku, nasta-vovat inteligentní body přerušení (breakpoints), které si navíc můžete uschovat pro pozdější využití. Můžete si také prohlížet informace nacházející se v paměti počítače.
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 45
Visual Studio oplývá celou řadou dalších funkcí, které se v této kapitole vůbec nezmiňují – patří mezi ně například řízení projektů, integrované řízení zdrojového kódu, funkce pro refaktoraci kódu nebo bohatě vy-bavený model rozšiřitelnosti. Pokud navíc pracujete s Visual Studio Team Foundation Server 2010, získáte pokročilejší možnosti pro unit testy, týmovou spolupráci nebo pro podporu řízení verzí (je daleko mocnější než běžné jednodušší nástroje, jako je Visual SourceSafe). O Visual Studiu Team Foundation Server 2010 v této kapitole nehovoříme – další informace najdete na http://msdn.microsoft.com/teamsystem.
Weby a webové projektyPro některé vývojáře může být trochu matoucí, že Visual Studio nabízí dva způsoby jak vytvořit webovou aplikaci, která je řízena technologií ASP.NET:
• Vývoj založený na projektu. Když vytvoříte webový projekt, Visual Studio vygeneruje soubor pro-jektu .csproj (za předpokladu, že kódujete v C#), kam zaznamená soubory, které máte v projektu, a kam také uloží několik nastavení pro potřeby ladění. Když pak spustíte webový projekt, Visual Studio zkompiluje veškerý váš kód do jediné assembly ještě předtím, než spustí webový prohlížeč.
• Vývoj bez projektu. Alternativním přístupem je vytvořit prostý web bez projektového souboru. V ta-kovém případě Visual Studio předpokládá, že každý soubor, který je v adresáři webu (a v jeho poda-dresářích), je součástí vaší webové aplikace. V tomto scénáři Visual Studio nepotřebuje předběžně kompilovat váš kód. ASP.NET zkompiluje váš web až tehdy, když poprvé požádáte o nějakou stránku. (Samozřejmě můžete použít tzv. předběžnou kompilaci, abyste u nasazené aplikace odstranili nadměr-nou zátěž při prvním požadavku. Jak se to udělá, se vysvětluje v kapitole 18.)
První verze .NET Visual Studia používala model s projektem. Visual Studio 2005 odstranilo model s projek-tem a upřednostnilo vývoj bez projektu. Proti tomu však protestovala malá, ale významná skupina vývojářů. Když u Microsoftu zjistili, že skutečně existují specifické scénáře, v nichž se pracuje lépe, když se vyvíjejí s projektem, vydali doplněk, který se dal zdarma stáhnout a který do Visual Studia 2005 vrátil funkce pro vývoj s projektem. Ve Visual Studiu 2010 jsou podporovány obě alternativy.
V této kapitole začnete vytvořením standardního webu bez projektu, protože je to jednodušší a přímočařejší přístup. Později se v této kapitole seznámíte se scénáři, které pracují lépe, když se vyvíjejí s projektem, a nau-číte se vytvářet webové projekty.
Vytvoření webu bez projektuProtože se určitě ihned chcete pustit do konkrétní práce, zvolte File > New > Website. Visual Studio zobrazí dialog New Web Site (viz obrázek 2-1). Chcete-li vytvořit nový web, musíte nejprve zvolit vývojový jazyk (nalevo), verzi .NET (nahoře uprostřed), šablonu webu (uprostřed) a umístění (dole). Jakmile specifikujete všechny tyto podrobnosti, klikněte na tlačítko OK. Vytvoří se váš web.
V příštích sekcích tyto podrobnosti trochu rozvineme.
Kapitola 2 – Visual Studio46
1. Zvolte jazyk 2. Zvolte verzi .NET 3. Zvolte šablonu webu
4. Zvolte umístění
Obrázek 2-1. Okno New Web Site.
SKRYTÝ SOUBOR ŘEŠENÍ
Přestože vývoj bez projektu ulehčuje život, ze zákulisí pořád vykukují poslední pozůstatky systému Visual Studia, který byl založen na řešeních.
Když vytvoříte webovou aplikaci, Visual Studio ve skutečnosti vytvoří soubory řešení (.sln a .suo) v nějakém adresáři specifickém pro uživatele, jako například c:\Users\[JménoUživatele]\Documents\Visual Studio 2010\Projects\[NázevSložkyWebu]. Soubory řešení poskytují několik funkcí specifických pro Vi-sual Studio, které se přímo nevztahují k ASP.NET, jako jsou třeba nastavení týkající se ladění. Když například přidáte do kódu nějaké webové stránky bod přerušení (breakpoint) (bude to probráno později v sekci "Ladění ve Visual Studiu"), Visual Studio uloží tento bod přerušení do souboru .suo, takže bude k dispozici, až projekt otevřete ně-kdy později. Obdobným způsobem Visual Studio sleduje aktuálně otevřené soubory, takže až se někdy později vrátíte do projektu, může vám zobrazit naposledy otevřené soubory. Tento přístup ke správě řešení je ale chou-lostivý – přesunete-li projekt z jednoho umístění na jiné, o všechny tyto informace přijdete. Protože však nejsou až tak důležité (dívejte se na ně jako na několik konkrétních nastavení projektu), jejich ztráta není žádnou tragédií. Všeobecné výhody tohoto systému bez projektů za tenhle kompromis stojí.
Chcete-li trvalejší řešení, uložte soubory řešení explicitně do umístění, které sami zvolíte. Klikněte prostě v Prů-zkumníkovi řešení (Solution Explorer, reprezentuje vaše řešení) na horní položku. Pokud například otevřete složku s názvem MyWebSite, bude se horní položka jmenovat Solution 'MyWebSite'. Pak zvolte File -> Save [NázevŘešení] As. Tato technika se hodí, jestliže jste vytvořili řešení, v němž kombinujete několik aplikací (například nějaký web vytvořený bez projektu plus komponentu typu knihovna tříd) a chcete je editovat a ladit souběžně.
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 47
Vývojový jazykTímto jazykem identifikujete programovací jazyk .NET, v němž budete psát kód svého webu. Jazyk, který zvolíte, bude výchozím jazykem projektu. To znamená, že explicitně můžete přidat webové stránky Visual Basicu do webu napsaného v C# a naopak.
Verze .NET FrameworkuStarší verze Visual Studia byly těsně svázané s konkrétními verzemi .NET. S Visual Studiem .NET jste vytváře-li aplikace .NET 1.0, s Visual Studiem .NET 2003 aplikace .NET 1.1 a s Visual Studiem 2005 aplikace .NET 2.0.
Visual Studio 2008 toto omezení odstranilo tím, že bylo zacíleno na více verzí, a Visual Studio 2010 v tomto trendu pokračuje. Umožňuje vytvářet webové aplikace, které jsou navrženy tak, že se mohou provozovat s .NET 2.0, .NET 3.0, .NET 3.5 nebo .NET 4.0. Obvykle vybíráte nejnovější verzi, kterou podporuje váš webo-vý server. Novější verze poskytují přístup k novějším funkcím a všechny příklady, které byly zařazeny do této knihy, jsou zacíleny na .NET 4.
POZNÁMKA Nic vám samozřejmě nebrání, chcete-li si nainstalovat na webový server několik verzí .NET a na-konfigurovat několik virtuálních adresářů tak, aby používaly různé verze ASP.NET (popisuje se to v kapitole 18).
Aby se Visual Studio mohlo přesně zacílit na danou verzi, obsahuje pro každou verzi .NET tzv. referenční assembly (reference assemblies). Tyto assembly obsahují metadata všech typů, ale žádný kód požadovaný k jejich implementaci. To znamená, že Visual Studio 2010 může použít referenční assembly k tomu, aby přizpůsobilo na míru Intellisense a kontroly chyb tak, že nebudete moci používat ovládací prvky, třídy nebo členy, které nejsou dostupné v té verzi .NET, na kterou jste zacíleni. Pomocí těchto metadat také určuje, které ovládací prvky se mají objevit v Toolboxu, které členy se mají objevit v oknech Properties a Object Browser atd., aby zajistilo, že celé vývojové prostředí bude omezeno na verzi, kterou jste si zvolili.
Verzi .NET, na kterou se chcete zacílit, můžete změnit i poté, co jste vytvořili web. Postupujte takto: 1. Zvolte Website > Start Options. 2. V seznamu nalevo zvolte kategorii Build. 3. V seznamu Target Framework zvolte verzi .NET, na kterou se chcete zacílit.
POZNÁMKA Ve webovém projektu je postup trochu jiný. V něm začnete tím, že v Průzkumníku řešení dvojitě kliknete na uzel Properties. Pak zvolte záložku Application, která obsahuje seznam Target Framework, v němž vyberete verzi .NET, na kterou se chcete zacílit.
Když změníte verzi .NET, Visual Studio poměrně značně upraví soubor web.config. Například soubor web.config pro aplikaci .NET 4 je stručný a přehledný, protože všechny potřebné podpůrné konstrukce jsou už připraveny v kořenovém souboru web.config počítače. Soubor web.config pro aplikaci .NET 3.5 ovšem zahrnuje pěknou porci "vaty", aby se explicitně zapnula podpora pro funkce Ajaxu a C# 3.5. Do obsahu souboru web.config se hlouběji zanoříte v kapitole 5.
Kapitola 2 – Visual Studio48
ŠablonaJakmile zvolíte jazyk (v seznamu nalevo), uvidíte seznam všech šablon, které Visual Studio poskytuje pro tento jazyk (ve velkém poli uprostřed). Šablona určuje, jaké soubory bude mít web na počátku.
Visual Studio podporuje několik typů aplikací ASP.NET, ale všechny se kompilují a vykonávají stejně. Jediný rozdíl je v tom, jaké soubory Visual Studio standardně vytvoří na začátku. Pokud například vytvoříte WCF Service, Visual Studio vygeneruje web, který bude mít v sobě jen jedinou službu WCF (nikoliv webovou stránku ASP.NET).
Následuje přehled dostupných šablon:
• ASP.NET Web Site. Vytvoří plnohodnotný web ASP.NET, v němž už bude základní infrastruktura. Web bude obsahovat vzor stránek (master page), kde bude nadefinováno úhrnné rozvržení (se záhla-vím, zápatím a pruhem nabídek), a rovnou použitelné stránky default.aspx a about.aspx. Web také bude obsahovat složku Accounts se stránkami pro registraci, pro přihlášení a pro změnu hesla a složku Scripts s knihovnou jQuery pro JavaScript na straně klienta.
• ASP.NET Empty Web Site. Vytvoří téměř prázdný web. Bude obsahovat pouze očesaný konfigurační soubor web.config a nic jiného. Sem snadno doplníte další věci, jen co začnete kódovat.
TIP Jestliže je ASP.NET pro vás poměrně nové, začněte s volbou ASP.NET Empty Web Site. Až si přečtete ostatní kapitoly této knihy a naučíte se používat takové funkce, jako jsou vzory stránek a členství, budete lépe připraveni na to, abyste mohli skočit po hlavě do trochu spletitější šablony ASP.NET Web Site, pokud bude vyhovovat vašim potřebám.
• ASP.NET Dynamic Data Entities Web Site. Vytvoří web ASP.NET, který používá funkci ASP.NET s názvem Dynamic Data, popisovanou v kapitole 33. Web je navržen tak, aby přistupoval k podklado-vé databázi pomocí modelu entit (Entity Model), zatímco podobně pojmenovaná šablona ASP.NET Dynamic Data LINQ to SQL Web Site používá starší přístup s LINQ to SQL.
• WCF Service. Vytvoří službu WCF – knihovnu metod na straně serveru, které mohou volat vzdálení klienti (například aplikace Windows). Přestože v této knize model WCF podrobně neprobíráme, v ka-pitole 34 společně vytvoříme služby WCF pro poskytnutí funkcionality na straně serveru pro stránky Silverlightu.
• ASP.NET Reports Web Site. Vytvoří web ASP.NET, který používá ovládací prvek ReportView a ná-stroj SQL Server Reporting Services (pro generování databázových reportů, které se mohou prohlížet a spravovat přes web). Obdobnou službu poskytuje i šablona ASP.NET s názvem Crystal Reports Web Site, používá však konkurenční software Crystal Reports.
Přestože většina vývojářů preferuje zahájit práce s šablonami ASP.NET Empty Web Site, nebo ASP.NET Web Site a hned začít kódovat, existují specializovanější šablony pro specifické typy webových aplikací. Chcete-li si je prohlédnout, klikněte v dialogu New Web Site zcela vlevo na záhlaví Online Templates. Bude chvilku trvat, než Visual Studio zkontaktuje webové servery Microsoftu. Jakmile se tak stane, přidá seznam podkategorií ša-blon, v každé z nich bude skupina hotových šablon. Vývojáři ASP.NET si například mohou stáhnout šablonu, chtějí-li vytvořit nějaký web DotNetNuke (který používá populární framework portálu DotNet Nuke), nebo nějaký web ASP.NET MVC, který k autentizaci uživatelů používá OpenID.
335
KAPITOLA 8
Datové komponenty a sada dat
V předchozí kapitole jste se poprvé podívali na ADO.NET a prozkoumali přístup k da-tům založený na připojení. Nyní nastal čas, abyste svůj kód pro přístup k datům vložili do aplikace s dobrým návrhem.
V řádně zorganizované aplikaci se kód pro přístup k datům nikdy nevkládá přímo do stránek (do jejich souborů kódu v pozadí). Vkládá se do databázové komponenty určené k tomuto účelu. V této kapitole uvidíte, jak se vytvoří jednoduchá vlastní třída pro přístup k datům a jak se do ní přidávají oddělené metody pro jednotlivé činnosti, které potřebujete s daty dělat. Nejlepší na tom ale bude, že svou databázovou kom-ponentu budete moci využívat všeobecně, protože nebude omezena jen na scénáře, v nichž se pracuje s kódem. V příští kapitole pak uvidíte, jak se vaše databázová kom-ponenta zapojí do infrastruktury ASP.NET pro vázání dat.
V této kapitole se budeme také zabývat odpojenými daty – tedy funkcemi ADO.NET, které se soustřeďují okolo pojmu sada dat (DataSet) a jež umožňují komunikovat s daty ještě dlouho poté, co jste ukončili připojení ke zdroji dat. Ve stránkách ASP.NET není povinné pracovat s objekty sady dat (DataSet). Nicméně vám poskytují mnohem větší flexibilitu při pohybu po datech, jejich filtrování a řazení – což jsou témata, která se probírají v této kapitole.
Budování komponenty pro přístup k datůmV profesionálních aplikacích se databázový kód nevkládá přímo u klienta, ale zapouz-dřuje se do třídy, která je vyhrazena pro tyto záležitosti. Pokud chce klient provést něja-kou databázovou operaci, stačí vytvořit instanci této třídy a zavolat patřičnou metodu.
Až budete vytvářet databázovou komponentu, měli byste dodržovat základní zásady uvedené v tomto oddílu. Tím zajistíte, že databázová komponenta bude dobře zapouz-dřená a optimalizovaná, že se bude moci (pokud to bude potřeba) vykonávat v oddě-leném procesu, a že dokonce se bude moci použít i v konfiguraci složené z několika webových serverů, jejímž účelem je vyrovnávat zatížení.
• Otevírejte a uzavírejte připojení rychle. Otevřete databázové připojení při každém volání metody a uzavřete je ještě předtím, než metoda skončí. Připojení
Kapitola 8 – Datové komponenty a sada dat336
by se nikdy nemělo ponechat otevřené mezi jednotlivými klientskými požadavky, přičemž klient by neměl mít žádnou kontrolu nad tím, jak se připojení získávají, nebo kdy se uvolňují. Pokud by klient měl tyto pravomoci, docházelo by k situacím, kdy se některé připojení neukončí tak rychle, jak je to možné, nebo že bude ponecháno omylem dlouho otevřené, což snižuje škálovatelnost systému.
• Implementujte zpracování chyb. Pomocí zpracování chyb zajistěte, aby se připojení uzavírala i tehdy, když příkaz SQL vygeneruje nějakou výjimku. Uvědomte si, že počet možných připojení je omezený, a pokud je používáte zbytečně (byť jenom na několik sekund), může to mít opravdu značný dopad na celkový výkon.
• Při návrhu aplikace dodržujte bezstavové praktiky. Všechny informace, které potřebuje nějaká metoda, předávejte v parametrech dané metody. Všechna získaná data pak vracejte prostřednictvím návratových hodnot. Vytvoříte-li třídu, která si bude udržovat nějaký stav, nemůžete ji snadno imple-mentovat jako webovou službu nebo použít ve scénáři, kdy se vybalancovává zatížení. A dále: pokud je databázová komponenta hostována vně procesu, každé volání metody vytváří znatelnou zátěž. Také nezapomínejte, že pokud se vlastnosti nastavují opakovaným voláním metod, bude to trvat mnohem déle, než když se vyvolá jediná metoda se všemi těmito informacemi v podobě parametrů.
• Klienti by neměli vydávat dotazy s příliš širokým záběrem. Každý dotaz by měl uvážlivě vybírat pouze ty sloupce, které jsou zapotřebí. Také byste měli vždy, když je to možné, omezovat výsledky po-mocí klauzule WHERE. Pokud například získáváte záznamy objednávek, pravděpodobně půjde do do-tazu vložit nějaké rozpětí od-do (nebo nějakou klauzuli SQL, jakou je třeba TOP 1000). Bez těchto bezpečnostních opatření může vaše aplikace z počátku pracovat uspokojivě, nicméně se bude postup-ně zpomalovat, jak databáze bude postupně narůstat a klienti budou provádět stále rozsáhlejší dotazy, které budou zatěžovat databázi i síť.
V dobré, přímočaře navržené databázové komponentě se používá separátní třída pro každou databázovou tabulku (nebo pro logicky provázanou skupinu tabulek). Všechny obvyklé činnosti při práci s databází, jako je vložení, odstranění nebo modifikace záznamu, se zabalují do oddělených bezstavových metod. A koneč-ně – v každém volání databáze se používá nějaká uložená procedura, která je určena pro daný účel. Pečlivě vrstvený návrh ukazuje obrázek 8-1.
Obrázek 8-1. Vrstvený návrh s databázovou třídou.
Jednoduchou databázovou komponentu předvádí následující příklad. Databázový kód se v něm nevkládá přímo do webové stránky, ale používá mnohem lepší návrhářský postup, protože odděluje kód do samostatné třídy, kterou lze používat na mnoha stránkách. Tato třída se dá (pokud je to potřeba) zkompilovat jako část oddělené komponenty. A kromě toho, připojovací řetězec se získává ze sekce <connectionStrings> sou-boru web.config, nepíše se explicitně do kódu.
Databázová komponenta se ve skutečnosti skládá ze dvou tříd – ze třídy datového balíčku (data package class), která obaluje informace jediného záznamu (a jež je známa jako datová třída, data class), a ze třídy data-
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 337
bázových utilit, která provádí skutečné databázové operace pomocí kódu ADO.NET (a jež je známa jako třída přístupu k datům, data access class). V této kapitole se na komponentu, která obsahuje tyto dvě ingredience, odkazujeme jako na databázovou komponentu. V příštích oddílech se detailně seznámíte s velmi jednodu-chou databázovou komponentou, která pracuje s jedinou tabulkou.
POZNÁMKA Databázová komponenta ale nemusí nutně své akce vykonávat pomocí tříd ADO.NET. Například byste neměli přehlédnout možnosti LINQ to Entities (budeme je probírat v kapitole 13) a část prací zajistit prostřednic-tvím této technologie. Je ovšem žádoucí, abyste pro svou databázovou logiku vždy vytvořili separátní, bezstavovou komponentu, a to na základě zásad, které jsou popisovány v této kapitole.
Datová třídaAby se do databáze Northwind mohly informace snadněji vkládat i z ní vytahovat ven, bude rozumné, když vytvoříme třídu EmployeeDetails s údaji o zaměstnanci, která bude poskytovat všechny databázové sloup-ce jako veřejné vlastnosti. Kompletní kód této třídy vidíte zde:
public class EmployeeDetails
{
private int employeeID;
public int EmployeeID
{
get {return employeeID;}
set {employeeID = value;}
}
private string firstName;
public string FirstName
{
get {return firstName;}
set {firstName = value;}
}
private string lastName;
public string LastName
{
get {return lastName;}
set {lastName = value;}
}
private string titleOfCourtesy;
public string TitleOfCourtesy
{
get {return titleOfCourtesy;}
set {titleOfCourtesy = value;}
}
Kapitola 8 – Datové komponenty a sada dat338
public EmployeeDetails(int employeeID, string firstName, string lastName,
string titleOfCourtesy)
{
EmployeeID = employeeID;
FirstName = firstName;
LastName = lastName;
TitleOfCourtesy = titleOfCourtesy;
}
}
Připomínáme, že do této třídy nejsou zařazeny všechny informace, které se nacházejí v tabulce Employees, protože chceme udržet náš příklad co nejstručnější.
Když budujete datovou třídu, můžete se rozhodnout, že použijete automatické vlastnosti, což je funkcionalita jazyka C#, která vám umožňuje vytvořit obal vlastnosti a podkladovou privátní proměnnou prostřednictvím jediné konstrukce kódu, jak je to uvedeno zde:
public int EmployeeID
{ get; set; }
Používáte-li automatické vlastnosti, vygeneruje se privátní proměnná automaticky v době kompilace, což znamená, že neznáte její název. V kódu musíte k této privátní proměnné vždy přistupovat prostřednictvím procedur vlastnosti. Kompilátor C# dále přidává kód, který získává a nastavuje privátní proměnnou pomocí stejné cesty, již byste použili, pokud byste tento kód napsali sami.
Automatické proměnné sice vypadají podobně jako veřejné členské proměnné, ale důsledky používání au-tomatických proměnných jsou diametrálně odlišné. Protože jsou automatické proměnné opravdové, plno-hodnotné vlastnosti, můžete je později nahradit explicitní vlastností (potřebujete-li například přidat nějaký validační kód), aniž byste museli měnit veřejné rozhraní datové třídy nebo zasahovat do jiných tříd, které vy-užívají datovou třídu. A obdobně – automatické vlastnosti mají veškerá metadata explicitních vlastností, takže v klíčových programovacích scénářích pracují jako vlastnosti. Na rozdíl od veřejných členských proměnných automatické vlastnosti podporují například techniky pro vázání dat (viz kapitolu 9).
Uložené proceduryNež můžete začít programovat logiku přístupu k datům, musíte už mít připravenou sadu uložených procedur, jimiž se budou informace získávat, vkládat a aktualizovat. Následující databázový skript vytváří pět uložených procedur, které jsou k tomu zapotřebí:
CREATE PROCEDURE InsertEmployee
@EmployeeID int OUTPUT,
@FirstName varchar(10),
@LastName varchar(20),
@TitleOfCourtesy varchar(25)
AS
INSERT INTO Employees
(TitleOfCourtesy, LastName, FirstName, HireDate)
VALUES (@TitleOfCourtesy, @LastName, @FirstName, GETDATE());
SET @EmployeeID = @@IDENTITY
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 339
GO
CREATE PROCEDURE DeleteEmployee
@EmployeeID int
AS
DELETE FROM Employees WHERE EmployeeID = @EmployeeID
GO
CREATE PROCEDURE UpdateEmployee
@EmployeeID int,
@TitleOfCourtesy varchar(25),
@LastName varchar(20),
@FirstName varchar(10)
AS
UPDATE Employees
SET TitleOfCourtesy = @TitleOfCourtesy,
LastName = @LastName,
FirstName = @FirstName
WHERE EmployeeID = @EmployeeID
GO
CREATE PROCEDURE GetAllEmployees
AS
SELECT EmployeeID, FirstName, LastName, TitleOfCourtesy FROM Employees
GO
CREATE PROCEDURE CountEmployees
AS
SELECT COUNT(EmployeeID) FROM Employees
GO
CREATE PROCEDURE GetEmployee
@EmployeeID int
AS
SELECT EmployeeID, FirstName, LastName, TitleOfCourtesy FROM Employees
WHERE EmployeeID = @EmployeeID
GO
Třída přístupu k datům ( databázové utility)Ještě potřebujete třídu databázových utilit, která bude provádět skutečné databázové operace. Tato třída bude využívat uložené procedury vypsané v předchozím oddílu. V našem příkladu jsme třídě databázových utilit přidělili název EmployeeDB. Zapouzdřuje veškerý kód pro přístup k datům a podrobnosti specifické pro danou databázi. Podívejte se na její osnovu:
Kapitola 8 – Datové komponenty a sada dat340
public class EmployeeDB
{
private string connectionString;
public EmployeeDB()
{
// Získá výchozí připojovací řetězec.
connectionString = WebConfigurationManager.ConnectionStrings[
"Northwind"].ConnectionString;
}
public EmployeeDB(string connectionString)
{
// Nastaví specifikovaný připojovací řetězec.
this.connectionString = connectionString;
}
public int InsertEmployee(EmployeeDetails emp)
{ ... }
public void DeleteEmployee(int employeeID)
{ ... }
public void UpdateEmployee(EmployeeDetails emp)
{ ... }
public EmployeeDetails GetEmployee()
{ ... }
public List<EmployeeDetails> GetEmployees()
{ ... }
public int CountEmployees()
{ ... }
}
POZNÁMKA Možná jste si všimli, že třída EmployeeDB používá metody instance, nikoliv statické metody. Je to kvůli tomu, že i když třída EmployeeDB neukládá žádný stav pocházející z databáze, ukládá připojovací řetězec jako privátní členskou proměnnou. Protože se jedná o instanční třídu, připojovací řetězec je možné získat pokaždé, když se ze třídy vytvoří objekt (instance), přičemž se to nemusí dělat pokaždé, když se volá nějaká metoda. Při tomto přístupu je kód trochu přehlednější a bude o něco rychlejší (nebudeme muset tolikrát číst ze souboru web.config). Celkový zisk z toho všeho je ovšem dosti malý, takže klidně můžete v databázových komponentách používat statické metody.
Ve všech metodách se používá stejný pečlivý přístup, kdy se výlučně spoléháme na uloženou proceduru, která bude jako jediná komunikovat s databází. Podívejte se na následující kód pro vložení záznamu. Předpokládá se v něm, že jste importovali jmenný prostor System.Data.SqlClient:
public int InsertEmployee(EmployeeDetails emp)
{
SqlConnection con = new SqlConnection(connectionString);
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 341
SqlCommand cmd = new SqlCommand("InsertEmployee", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar, 10));
cmd.Parameters["@FirstName"].Value = emp.FirstName;
cmd.Parameters.Add(new SqlParameter("@LastName", SqlDbType.NVarChar, 20));
cmd.Parameters["@LastName"].Value = emp.LastName;
cmd.Parameters.Add(new SqlParameter("@TitleOfCourtesy",SqlDbType.NVarChar, 25));
cmd.Parameters["@TitleOfCourtesy"].Value = emp.TitleOfCourtesy;
cmd.Parameters.Add(new SqlParameter("@EmployeeID", SqlDbType.Int, 4));
cmd.Parameters["@EmployeeID"].Direction = ParameterDirection.Output;
try
{
con.Open();
cmd.ExecuteNonQuery();
return (int)cmd.Parameters["@EmployeeID"].Value;
}
catch (SqlException err)
{
// Nahradí informace o chybě něčím méně konkrétním.
// Zde také můžete chybu někam zaprotokolovat.
throw new ApplicationException("Data error.");
}
finally
{
con.Close();
}
}
Jak sami vidíte, metoda přijímá data v podobě datového objektu EmployeeDetails. Jakékoliv chyby budou zachyceny, takže citlivé interní podrobnosti o chybě nebudou vráceny do kódu webové stránky. Tím se zabra-ňuje tomu, aby webová stránka poskytovala takové informace, které by se daly případně zneužít jako exploity při útocích. Zde je také ideální místo pro volání vhodné metody z nějaké protokolovací komponenty, která by uložila kompletní podrobnosti o vzniklé chybě do protokolu událostí nebo do nějaké jiné databáze.
Metody GetEmployee() a GetEmployees() vracejí data pomocí jediného objektu EmployeeDetails, re-spektive pomocí seznamu objektů EmployeeDetails:
public EmployeeDetails GetEmployee(int employeeID)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("GetEmployee", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@EmployeeID", SqlDbType.Int, 4));
cmd.Parameters["@EmployeeID"].Value = employeeID;
try
Kapitola 8 – Datové komponenty a sada dat342
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
// Zkontroluje, zda dotaz vrátil nějaký záznam.
if (!reader.HasRows) return null;
// Získá první řádek.
reader.Read();
EmployeeDetails emp = new EmployeeDetails(
(int)reader["EmployeeID"], (string)reader["FirstName"],
(string)reader["LastName"], (string)reader["TitleOfCourtesy"]);
reader.Close();
return emp;
}
catch (SqlException err)
{
throw new ApplicationException("Data error.");
}
finally
{
con.Close();
}
}
public List<EmployeeDetails> GetEmployees()
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("GetAllEmployees", con);
cmd.CommandType = CommandType.StoredProcedure;
// Vytvoří kolekci pro záznamy zaměstnanců.
List<EmployeeDetails> employees = new List<EmployeeDetails>();
try
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
EmployeeDetails emp = new EmployeeDetails(
(int)reader["EmployeeID"], (string)reader["FirstName"],
(string)reader["LastName"], (string)reader["TitleOfCourtesy"]);
employees.Add(emp);
}
reader.Close();
return employees;
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 343
}
catch (SqlException err)
{
throw new ApplicationException("Data error.");
}
finally
{
con.Close();
}
}
Metoda UpdateEmployee() hraje speciální roli. Určuje strategii simultánního zpracování databázové kom-ponenty (viz pozdější oddíl "Strategie simultánního zpracování").
Tady je její kód:
public void UpdateEmployee(int EmployeeID, string firstName, string lastName,
string titleOfCourtesy)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("UpdateEmployee", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar, 10));
cmd.Parameters["@FirstName"].Value = firstName;
cmd.Parameters.Add(new SqlParameter("@LastName", SqlDbType.NVarChar, 20));
cmd.Parameters["@LastName"].Value = lastName;
cmd.Parameters.Add(new SqlParameter("@TitleOfCourtesy", SqlDbType.NVarChar,25));
cmd.Parameters["@TitleOfCourtesy"].Value = titleOfCourtesy;
cmd.Parameters.Add(new SqlParameter("@EmployeeID", SqlDbType.Int, 4));
cmd.Parameters["@EmployeeID"].Value = EmployeeID;
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException err)
{
throw new ApplicationException("Data error.");
}
finally
{
con.Close();
}
}
Kapitola 8 – Datové komponenty a sada dat344
Posledními dvěma ingrediencemi jsou metody DeleteEmployee() a CountEmployees():
public void DeleteEmployee(int employeeID)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("DeleteEmployee", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@EmployeeID", SqlDbType.Int, 4));
cmd.Parameters["@EmployeeID"].Value = employeeID;
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException err)
{
throw new ApplicationException("Data error.");
}
finally
{
con.Close();
}
}
public int CountEmployees()
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("CountEmployees", con);
cmd.CommandType = CommandType.StoredProcedure;
try
{
con.Open();
return (int)cmd.ExecuteScalar();
}
catch (SqlException err)
{
throw new ApplicationException("Data error.");
}
finally
{
con.Close();
}
}
543
KAPITOLA 12
Soubory a proudy
Většina webových aplikací se spoléhá především na databáze, když mají ukládat infor-mace. Databáze jsou nepřekonatelné ve víceuživatelských situacích. Zpracovávají bez jakýchkoliv potíží simultánní scénáře, přičemž podporují cachování a nízkoúrovňo-vé optimalizace disku, což zaručuje vynikající výkon. Stručně a jasně řečeno: RDBMS (Relational Database Management System) nabízí nejrobustnější a nejvýkonnější úlo-žiště dat.
Samozřejmě, většina vývojářů nevyhnutelně tu a tam čelí scénářům, kdy je potřeba přistupovat k datům z jiných umístění, například ze systému souborů. Jako běžně se vyskytující situaci můžeme uvést čtení informací, které vyprodukovala jiná aplikace, či rychlý zápis informací do rychle spíchnutého protokolu pro potřeby testování nebo vy-tvoření administrační stránky, která by administrátorům umožnila nahrávat soubory na server a prohlížet, co je momentálně na serveru umístěno. V této kapitole se dozvíte, jak se pracuje s třídami jmenného prostoru System.IO, chcete-li získávat informace o souborech, pracovat s cestami souborů jako s řetězci, zapisovat do souborů a číst je nebo serializovat objekty.
Práce se systémem souborůNa nejjednodušší úrovni se při přístupu k souborům získávají informace o tom, jaké existují soubory a adresáře, co v nich je, a provádějí se typické systémové operace se soubory (jako je kopírování souborů a vytváření adresářů). Při těchto úlohách neotví-ráte soubory, a ani do nich nezapisujete (tyto činnosti probereme v kapitole později).
.NET Framework poskytuje pro získávání informací o systému souborů několik zá-kladních tříd. Všechny jsou umístěny ve jmenném prostoru System.IO a není náho-dou, že tyto třídy se používají vždy stejným způsobem, ať už se jedná o webové aplikace nebo desktopové aplikace. Patří sem tyto třídy:
• Directory a File. Poskytují statické metody pro získávání informací o soubo-rech a adresářích, které jsou viditelné z vašeho serveru.
• DriveInfo, DirectoryInfo a FileInfo. Tyto třídy používají podobné instanční metody a vlastnosti pro získávání stejných informací.
Kapitola 12 – Soubory a proudy544
Obě sady tříd poskytují obdobné metody a vlastnosti. Klíčovým rozdílem je to, že než můžete zavolat nějakou metodu z té druhé skupiny, musíte nejprve vytvořit objekt typu DirectoryInfo nebo FileInfo, zatímco statické metody tříd Directory a File jsou dostupné stále. Typicky jsou třídy Directory a File pohodl-nější pro jednorázové úlohy. Oproti tomu, pokud potřebujete získávat několik druhů informací, je lepší, když si vytvoříte objekty typu DirectoryInfo nebo FileInfo. Pak se nebudete muset zdržovat uváděním názvu adresáře nebo souboru při každém volání metody. Také je to rychlejší, protože třídy DirectoryInfo a File-Info provádějí vlastní testy bezpečnosti pouze jednou – když vytvoříte instanci objektu. Třídy Directory a File provádějí bezpečnostní kontroly při každém volání metody.
Třídy Directory a FileTřídy Directory a File poskytují řadu užitečných metod. Jejich přehled předkládají tabulky 12-1 a 12-2. Připomínáme, že každá metoda přebírá stejný parametr: plně kvalifikovanou cestu identifikující adresář či soubor, nad kterým chcete vykonat danou operaci.
Tabulka 12-1. Metody třídy Directory.
Metoda Popis
CreateDirectory() Vytvoří nový adresář. Specifikujete-li nějaký adresář uvnitř jiného neexistujícího adresáře, ASP.NET důvtipně vytvoří všechny požadované adresáře.
Delete() Odstraní odpovídající prázdný adresář. Chcete-li odstranit adresář spolu s jeho obsahem (podadresáři a soubory), přidejte nepovinný druhý parametr true.
Exists() Vrací true nebo false, čímž indikuje, zdali zadaný adresář existuje nebo ne.
GetCreationTime()
GetLastAccessTime()
GetLastWriteTime()
Vrací objekt typu DateTime reprezentující časový okamžik, kdy byl adresář vy-tvořen, resp. kdy se k němu naposled přistoupilo, resp. kdy se do něho naposled zapisovalo. Každá metoda začínající na "Get" má odpovídající metodu začínající na "Set", které v této tabulce uvedené nejsou.
GetDirectories()
GetFiles()
Vrací pole řetězců, jeden pro každý podadresář, resp. soubor ve specifikovaném adresáři. Do metod se dá jako druhý parametr předat vyhledávací výraz (napří-klad výraz ASP*.*).
GetLogicalDrives() Vrací pole řetězců, jeden pro každou jednotku definovanou na aktuálním počíta-či. Písmena jednotek se uvádějí ve tvaru c:\.
GetParent() Provede rozklad předaného řetězce adresáře a vrátí rodičovský adresář. Mů-žete to udělat i sami tak, že vyhledáte znak \ (nebo obecněji pomocí Path.Directory SeparatorChar), tato funkce však trochu ulehčuje život.
GetCurrentDirectory()
SetCurrentDirectory()
Umožňuje získat, resp. nastavit, aktuální adresář, což se hodí, potřebujete-li pra-covat s relativními cestami, a nikoliv s úplnými cestami. Na tyto funkce byste se však obecně spoléhat neměli – používejte raději úplné cesty.
Move() Přebírá dva parametry: zdrojovou cestu a cílovou cestu. Adresář a veškerý jeho obsah se dá přesunout na jakoukoliv cestu, pokud se nachází na stejné jednotce.
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 545
Metoda Popis
GetAccessControl()
SetAccessControl()
Vrací objekt System.Security.AccessControl.DirectorySecuri-ty. Pomocí tohoto objektu můžete prozkoumávat seznamy Windows pro řízení přístupu k adresáři (ACL, Access Control List), které se aplikují na daný adresář. Je dokonce možné je měnit programátorsky.
Tabulka 12-2. Metody třídy File.
Metoda Popis
Copy() Přebírá dva parametry: plně kvalifikovaný název zdrojového souboru a plně kva-lifikovaný název cílového souboru. Chcete-li povolit přepis existujícího souboru, použijte přetíženou variantu, která přebírá třetí logický parametr (nastavte jej na true).
Delete() Odstraní specifikovaný soubor, ale nevygeneruje žádnou výjimku, když se soubor nenajde.
Exists() Vrací true, nebo false, podle toho, zdali specifikovaný soubor existuje nebo ne.
GetAttributes()
SetAttributes()
Získá, resp. nastaví, výčtovou hodnotu, která může obsahovat libovolnou kombi-naci hodnot z výčtu FileAttributes.
GetCreationTime()
GetLastAccessTime()
GetLastWriteTime()
Vrací objekt typu DateTime, který reprezentuje časový okamžik, kdy byl soubor vytvořen, resp. kdy se k němu naposled přistoupilo, resp. kdy se do něho naposled zapisovalo. Každá metoda začínající na "Get" má odpovídající metodu začínající na "Set", které v této tabulce uvedené nejsou.
Move() Přebírá dva parametry: plně kvalifikovaný název zdrojového souboru a plně kva-lifikovaný název cílového souboru. Soubor můžete přesunout i na jinou jednotku a při přesunu ho zároveň přejmenovat (nebo ho přejmenovat, aniž byste ho pře-sunuli jinam).
CreateText() Vytvoří specifikovaný soubor a vrátí objekt typu FileStream, s jehož pomocí pak můžete do souboru zapisovat. CreateText() dělá totéž, ale vrací objekt typu StreamWriter obalující proud.
Open()
OpenWrite()
OpenRead()
OpenText()
Open() otevře soubor (za předpokladu, že existuje). OpenText() a Open-Read() otevřou soubor pouze pro čtení a vracejí FileStream, resp. Stream-Reader. OpenWrite() otevře soubor pouze pro zápis a vrátí FileStream.
ReadAllText()
ReadLines()
ReadBytes()
Přečte celý soubor a vrátí jeho obsah jako jediný řetězec, nebo pole řetězců (je-den řetězec pro každý řádek), nebo jako pole bajtů. Tyto metody volejte pouze na velmi malé soubory. U větších souborů používejte proudy a čtěte je po úsecích, abyste snížili nároky na paměť.
Kapitola 12 – Soubory a proudy546
Metoda Popis
WriteAllText()
WriteLines()
WriteBytes()
Zapíše celý soubor najednou pomocí dodaného řetězce, pole řetězců (jeden pro každý řádek), nebo pole bajtů. Jestliže už soubor existuje, přepíše se.
GetAccessControl()
SetAccessControl()
Vrací, resp. nastavuje, objekt System.Security.AccessControl.File-Security. Pomocí tohoto objektu můžete prozkoumávat seznamy Windows pro řízení přístupu k adresáři (ACL, Access Control List), které se aplikují na daný adresář. Je dokonce možné je měnit programátorsky.
TIP Jedinou věc, kterou třída File postrádá (a již poskytuje třída FileInfo), je možnost získat velikost zadané-ho souboru.
Metody tříd File a Directory jsou zcela intuitivní. Například – následujícím kódem si můžete dynamicky vypsat seznam názvů všech souborů v aktuálním adresáři:
string directoryName = @"c:\Temp";
// Získá seznam souborů a zobrazí ho na stránce.
string[] fileList = Directory.GetFiles(directoryName);
foreach (string file in fileList)
{
lstFiles.Items.Add(file);
}
V tomto příkladu je před řetězcem s cestou adresáře c:\Temp uveden znak zavináč (@). Tím se C# říká, aby interpretoval řetězec přesně tak, jak je napsaný. Kdyby tam zavináč nebyl, předpokládal by C#, že znak oddě-lovače pro úrovně adresářů (\) vyjadřuje začátek speciální posloupnosti znaků (tedy to, že účelem znaku je předznačit následující znak). Jinou volbou je použít přímo předznačenou posloupnost \\, kterou C# pochopí jako jediný znak obrácené lomítko. V takovém případě byste cestu zapsali ve tvaru c:\\Temp.
Protože je seznam souborů prostě seznamem obyčejných řetězců, dá se snadno svázat s nějakým ovládacím prvkem seznamu, takže dospějeme k efektivnější syntaxi pro zobrazení souborů na stránce:
string directoryName = @"c:\Temp";
lstFiles.DataSource = Directory.GetFiles(directoryName);
lstFiles.DataBind();
POZNÁMKA Aby výše uvedený kód mohl fungovat, musí mít účet, pod kterým běží zpracovatelský proces ASP.NET, přidělená patřičná oprávnění k adresáři, s nímž chcete pracovat. Jinak se při pokusu webové stránky přistoupit k systému souborů vygeneruje výjimka SecurityException. Oprávnění daného adresáře můžete upravit tak, že na něm kliknete pravým tlačítkem myši, vyberete Vlastnosti (Properties) a kliknete na záložku Zabezpečení (Security). Obvykle by to mělo probíhat hladce, pokud testujete aplikaci s integrovaným webovým serverem Visual Studia, který běží pod vaším uživatelským účtem. Snadno se ovšem můžete dostat do potíží, až svůj web nasadíte. V takovém přípa-dě bude potřeba, abyste udělili patřičná oprávnění skupině IIS_USRS (nebo modifikovat účet, který bude používat váš web). Další informace naleznete v kapitole 18.
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 547
Třídy DirectoryInfo a FileInfoVe třídách DirectoryInfo a FileInfo se zrcadlí funkcionalita tříd Directory a File. Kromě toho usnad-ňují procházky po adresářích a souborech. Například můžete snadno získat objekty FileInfo souborů v ně-jakém adresáři reprezentovaném objektem DirectoryInfo.
Připomínáme, že třídy Directory a File vystavují pouze metody. Třídy DirectoryInfo a FileInfo po-skytují metody i vlastnosti. Například třída File má samostatné metody GetAttributes() a SetAttribu-tes(), kdežto třída FileInfo vystavuje vlastnost Attributes, kterou lze číst i nastavovat. Jinou příjemnou věcí tříd DirectoryInfo a FileInfo je to, že sdílejí společnou sadu vlastností a metod, protože jsou obě odvozeny ze společné základní třídy FileSystemInfo. Jejich společné členy viz tabulka 12-3.
Tabulka 12-3. Členy tříd DirectoryInfo a FileInfo.
Člen Popis
Attributes Umožňuje získat nebo nastavit atributy pomocí kombinace hodnot z výčtu File-Attributes.
CreationTime
LastAccessTime
LastWriteTime
Umožňuje získat nebo nastavit čas vytvoření, čas posledního přístupu, resp. čas poslední modifikace pomocí objektu typu DateTime.
Exists Vrací true nebo false podle toho, zdali soubor, resp. adresář, existuje. Jinak řečeno: můžete vytvářet objekty FileInfo a DirectoryInfo, jimž neodpovídá žádný sku-tečný fyzický adresář, resp. soubor. V takovém případě samozřejmě nebudete moci pou-žívat vlastnosti jako CreationTime, nebo metody jako je MoveTo().
FullName
Name
Extension
FullName vrací řetězec reprezentující plně kvalifikovaný název adresáře nebo souboru, Name název adresáře nebo souboru (s příponou), Extension samotnou příponu ná-zvu adresáře nebo souboru.
Delete() Odstraní soubor nebo adresář, pokud existuje. Odstraňujete-li adresář, musí být prázdný, nebo musíte specifikovat nepovinný parametr nastavený na true.
Refresh() Aktualizuje objekt, takže bude synchronizován se všemi změnami v systému souborů, k nimž mezitím došlo (když byl například ručně změněn nějaký atribut souboru z Prů-zkumníka Windows).
Create() Vytvoří uvedený adresář nebo soubor.
MoveTo() Zkopíruje adresář a jeho obsah, nebo soubor. U objektu DirectoryInfo specifikujete novou cestu, u objektu FileInfo cestu a název souboru.
Třídy FileInfo a DirectoryInfo mají kromě toho několik jedinečných členů, které jsou uvedeny v tabul-kách 12-4 a 12-5.
Tabulka 12-4. Jedinečné členy třídy DirectoryInfo.
Člen Popis
Parent
Root
Vracejí objekt DirectoryInfo reprezentující rodičovský, resp. kořenový adresář.
Kapitola 12 – Soubory a proudy548
Člen Popis
CreateSubdirectory() Vytvoří adresář s uvedeným názvem v adresáři, který je reprezentovaném objek-tem DirectoryInfo. Vrátí také nový objekt DirectoryInfo reprezentující podadresář.
GetDirectories() Vrátí pole objektů DirectoryInfo, které reprezentují všechny adresáře obsaže-né v adresáři, pro který se metoda volá.
GetFiles() Vrátí pole objektů FileInfo, které reprezentují všechny soubory obsažené v adre-sáři, pro který se metoda volá.
Table 12-5. Jedinečné členy třídy FileInfo.
Člen Popis
Directory Vrací objekt DirectoryInfo reprezentující rodičovský adresář.
DirectoryName Vrací řetězec názvu rodičovského adresáře.
Length Vrací dlouhé celé číslo (typ long, 64bitové) vyjadřující velikost souboru v bajtech.
CopyTo() Zkopíruje soubor na novou cestu a pod novým názvem, obojí uvedete jako para-metr. Vrátí také nový objekt FileInfo reprezentující nový (resp. zkopírovaný) soubor. Můžete také specifikovat nepovinný parametr s hodnotou true, čímž po-volíte přepis.
Create()
CreateText()
Vytvoří specifikovaný soubor a vrátí objekt FileStream, s jehož pomocí pak mů-žete do souboru zapisovat. CreateText() dělá totéž, ale vrací objekt Strea-mWriter obalující proud.
Open()
OpenRead()
OpenText()
OpenWrite()
Otevře soubor (za předpokladu, že existuje). OpenRead() a OpenText() ote-vřou soubor pouze ke čtení a vrátí FileStream, resp. StreamReader. Open-Write() otevře soubor pouze pro zápis a vrátí FileStream.
Když vytváříte objekt DirectoryInfo nebo FileInfo, specifikujte v konstruktoru úplnou cestu, jak to vi-díte zde:
DirectoryInfo myDirectory = new DirectoryInfo(@"c:\Temp");
FileInfo myFile = new FileInfo(@"c:\Temp\readme.txt");
Když vytváříte nový objekt DirectoryInfo nebo FileInfo, obdržíte výjimku, pokud cesta není formálně správná (například tehdy, když obsahuje nepovolené znaky). Zadaná cesta ale nemusí odpovídat skutečnému fyzickému adresáři nebo souboru. Pokud si nejste jisti, můžete pomocí Exists zkontrolovat, zdali adresář nebo soubor opravdu existují.
Jestliže soubor nebo adresář neexistuje, můžete ho vytvořit metodou Create(). Ukázka:
// Definuje nový adresář a soubor.
DirectoryInfo myDirectory = new DirectoryInfo(@"c:\Temp\Test");
FileInfo myFile = new FileInfo(@"c:\Temp\Test\readme.txt");
ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 549
// Nyní je vytvoří. Na pořadí zde záleží.
// Nemůžete vytvořit soubor v adresáři, který ještě neexistuje.
myDirectory.Create();
FileStream stream = myFile.Create();
stream.Close();
Objekty FileInfo a DirectoryInfo získají informace ze systému souborů, když se jich poprvé dotážete na nějakou vlastnost. Při dalším používání už nekontrolují nové informace. To může vést k různým nekon-zistencím, jestliže se soubor mezitím změnil. Pokud víte (nebo máte podezření), že se informace o daném objektu ze systému souborů změnila, zavolejte metodu Refresh(), abyste získali nejčerstvější informace.
Třída DirectoryInfo neposkytuje žádnou vlastnost, s níž by se dala zjistit celková velikost adresáře. Můžete ovšem velmi snadno spočítat celkovou velikost všech souborů v konkrétním adresáři. Jednoduše sečtěte jed-notlivé hodnoty FileInfo.Length.
Než se do toho pustíte, rozmyslete si, zdali chcete do celkového součtu zahrnout také podadresáře. Následující metoda umožňuje použít oba přístupy:
private static long GetDirectorySize(DirectoryInfo directory,
bool includeSubdirectories)
{
long totalSize = 0;
// Přičítá velikosti jednotlivých souborů.
FileInfo[] files = directory.GetFiles();
foreach (FileInfo file in files)
{
totalSize += file.Length;
}
// Jestliže se to požaduje, přičte i velikosti podadresářů.
if (includeSubdirectories)
{
DirectoryInfo[] dirs = directory.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
totalSize += CalculateDirectorySize(dir, true);
}
}
return totalSize;
}
Potřebujete-li získat informace o volném místu na nějaké jednotce, obraťte se na třídu DriveInfo.
Třída DriveInfoTřída DriveInfo umožňuje získávat informace o diskových jednotkách počítače. Několik takových informa-cí vás může hodně zajímat – DriveInfo se typicky využívá pro zjištění, kolik je volného a kolik zabraného místa na dané jednotce. Členy třídy DriveInfo jsou vypsány v tabulce 12-6. Na rozdíl od tříd FileInfo a DirectoryInfo zde není k dispozici žádná třída Drive, která by poskytovala instanční verze těchto metod.
TVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLN
KNIHA 1
KNIHA
1
TVOR
BA DYN
AMICKÝ
CH STR
ÁNEK PROFESION
ÁLN
ASP.NET 4 a C# 2010
ASP.NET 4 a C# 2010
A d a m F r e e m a n M a r i o S z p u s z t a
9 7 8 8 0 7 4 1 3 1 3 1 8
ISBN 978-80-7413-131-8KATALOGOVÉ ČÍSLO: ZR1003DOPORUČENÁ CENA: 890 Kč
ASP.NET 4 a C# 2010 TVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLNĚ
Matthew MacDonald, Adam Freeman, Mario Szpuszta
E N C Y K L O P E D I E Z O N E R P R E S S
Pod tímto logem vycházejí publikace určené pro každého vážného zájemce o prá-ci s počítačem. Od ryze praktických příruček a průvodců až po komplexní publi-kace o všem, co potřebuje grafi k, webdesignér, vývojář či programátor při každo-denní práci. Na slevy, které můžete získat, a vydavatelský plán, v němž vedle knih domácích odborníků najdete celou řadu titulů světově uznávaných autorů, se informujte na adrese vydavatelství.
ASP.NET je výkonná technologie Microsoftu určená pro vytváření webových apli-kací běžících na straně serveru. Prostřednictvím této rozsáhlé publikace, která byla z praktických důvodů rozdělena do dvou samostatných knih, se můžete naučit všechno, co potřebujete ke zvládnutí ASP.NET 4 a C# 2010. Pokud jste již někdy předtím programovali v předchozí verzi ASP.NET, můžete se zaměřit pou-ze na některé (pro vás důležité) části nebo na nové funkce, například ASP.NET MVC, Silverlight či ASP.NET Dynamic Data, které jsou obsahem KNIHY 2. Pokud jste nikdy v ASP.NET neprogramovali, KNIHA 1 vám nabízí vhodné tempo výuky umožňující v krátkém čase projít všechny základní věci, které potřebujete znát v každodenní vývojářské praxi. Publikace, na které se podíleli tři zkušení autoři (Matthew MacDonald, Adam Freeman a Mario Szpuszta), obsahuje spoustu prak-tických příkladů a technik z reálného světa.
ASP.NET 4 a C# 2010, kniha 1 zahrnuje následující témata:
Základy ASP.NET (úvod do ASP.NET, Visual Studio, webové formuláře, servero-vé ovládací prvky, aplikace ASP.NET, správa stavu).
Přístup k datům (základy ADO.NET, datové komponenty a sada dat, vázání dat, bohatě vybavené datové ovládací prvky, cachování a asynchronní stránky, soubory a proudy, LINQ, XML).
Budování webů ASP.NET (uživatelské ovládací prvky, motivy a vzory stránek, navigace po webu, nasazování webů).
ASP.NET 4 a C# 2010, kniha 2 těsně navazuje na knihu 1 a popisuje:
Bezpečnost (bezpečnostní model ASP.NET, ověřování založené na formulářích, členství, ověřování systému Windows, autorizace a role, profi ly, kryptografi e, vlastní zprostředkovatelé členství).
Pokročilé uživatelské rozhraní (vlastní serverové ovládací prvky, grafi ky, GDI+ a grafy, JavaScript a techniky Ajaxu, portály s webovými částmi, ASP.NET AJAX).
Nové směry (MCV, systém dynamických dat ASP.NET, Silverlight).
© F
oto:
Len
ka K
řížov
á
www.zoner.cz
ZONER software, a.s. významný producent softwaru v oblasti digitální fotogra e,
po íta ové gra ky a multimédií, poskytovatel internetových
služeb, souvisejících s prezentací na internetu a e-komercí,
a nakladatelství odborné literatury.
Bonusové kapitoly ke stažení:
http://www.zonerpress.cz/download/bonusove-kapitoly-aspnet.zip
Zdrojové soubory ke stažení:
http://zonerpress.cz/download/aspnet4-a-c2010.zip
ZONER software, a.s., Nové sady 18, 602 00 Brno
Zoner Presstel.: 532 190 883e-mail: [email protected]
KNIHA 1 KNIHA 1