|
|
ASP.NET QuickStart Príručka
Tipy a triky
Novinky v 2.0
- Odosielanie medzi stránkami (Cross Page Posting) - ASP.NET 2.0 Vám povoľuje
spätne odosielanie z jednej stránky na druhú a môže získať hodnoty zdrojovej stránky
z cieľovej stránky.
- Ovládací prvok Wizard - Ovládací prvok wizard Vám dovoľuje do Vašich stránok
jednoducho pridať scenáre viac-krokového vstupného formulára (multi-step form entry
scenarios).
- Validačné skupiny - Validačné skupiny dovoľujú viacerým formulárom na stránke
byť validovanými oddelene.
- Focus API - Focus API Vám dovoľuje nastaviť zameranie na hocijaký ovládací
prvok na stránke, špecifikovať predvolené tlačidlá (submit) pred vstupné ovládacie
prvky (input controls), a viac.
- Poskytovatelia vytvorenia kompilácii - ASP.NET 2.0 obsahuje podporu kompilovanie
deklaratívnych súborových formátov, ak sú umiestnené v adresári the App_Code.
- Nekompilované stránky - Stránky v ASP.NET 2.0 je možné vyňať z kompilačného
procesu, aby boli namiesto toho interpretované počas behu programu.
- Zabezpečenie ne-ASP.NET obsahu - Pod IIS 6 môžete jednoducho zabezpečiť ne-ASP.NET
súbory (non-ASP.NET files) ako statické obrázky alebo klasické ASP stránky znútra
ASP.NET aplikácie.
- Funkcie klientského skriptovania (Client-Script Features) - ASP.NET 2.0 obsahuje
niekoľko nových funkcii, ktoré využívajú skripty na strane klienta.
Táto časť opisuje tipy a triky pre používanie niekoľkých nových funkcií v ASP.NET
2.0.
Cross Page PostBack
Štandardne sú tlačidlové ovládacie prvky na ASP.NET stránkach spätne odosielané
na rovnakú stránku, ktorá obsahuje tlačidlo, kde môžete pre odosielanie napísať
event handler. V mnohých prípadoch je toto očakávaným správaním, ale príležitostne
Budete taktiež chcieť odosielať na ďalšiu stránku vo Vašej aplikácii. Metóda Server.Transfer
môže byť použitá na pohyb medzi stránkami, avšak URL sa nezmení. Namiesto toho Vám
funkcia odosielanie pomedzi stránkami v ASP.NET 2.0 dovolí odštartovať normálny
postback na ďalšiu stránku Vašej aplikácie. V cieľovej stránke môžete potom pristupovať
k hodnotám serverových ovládacích prvkov v zdrojových stránkach, ktoré iniciovali
postback.
Pre používanie odosielania medzi stránkami môžete nastaviť vlastnosť PostBackUrl
ovládacích prvkovButton, LinkButton alebo ImageButton , ktorá špecifikuje
cieľovú stránku. V cieľovej stránke môžete potom pristúpiť k vlastnosti PreviousPage
pre vyvolanie hodnôt zo zdrojovej stránky. Štandardne je PreviousPage vlastnosťou
Page, takže musíte pristúpiť k ovládacím prvkom použitím metódy FindControl.
Môžete taktiež povoliť silne typový prístup k zdrojovej stránke nastavením direktívy
@PreviousPageType v cieľovej stránke na virtuálnu cestu alebo typ na zdrojovej
stránke. Všimnite si, že keď máte v úmysle pre viaceré stránky odosielať na jednu
cieľovú stránku, nemôžete použiť silne typový prístup (nechať direktívu PreviousPage
neurčenú).
VB Cross Page PostBack
Cross page posting funguje nasledovne:
- Cross page posting nastavuje akcie formulára v Page 1
- Po kliknutí na Button ide pošta (post) od Page 1 do Page 2
- Page 2 zachytáva viewstate z Page 1
- Po pristúpení k PreviousPage je viewstate opätovne osídlený (re-populated) do inštancie
Page 1
- Page 1 sa následne spracuje až do svojej fázy LoadComplete (vynímajúc prevádzanie)
- V tomto okamihu môže Page 2 pristúpiť k hodnotám ovládacích prvkov z Page 1
Pretože Page 1 sa spracuje (až do LoadComplete) ako odozva na cross-page post, niekedy
je potrebné (to special-case code) V stránke pre spustenie len, keď požiadavka nie
je cross-page post, ale namiesto toho normálnou požiadavkou na Page 1. Pre spracovanie
tejto situácie môžete použiť vlastonosť IsCrossPagePostBack v Page 1.
If Not Page.IsCrossPagePostBack Then
' handle a normal request
End If
VB
Taktiež môžete spraviť postback do inej aplikácie, avšak vlastnosť PreviousPage
je v tomto prípade null. Taktiež môžete presunúť kód (transfer in code), počas stáleho
zachovávania viewstate pomocou vlastnosti PreviousPage použitím Server.Transfer(IHttpHandler,
preserveViewState).
Ovládací prvok Wizard
Ovládací prvok Wizard sa používa pre vytvorenie viac-krokového vstupného
formulára (multi-step form entry process) na webovej stránke. Pre špecifikovanie
jednotlivých krokov umiestnite objekt WizardStep pre každý vstup (entry)
medzi otvárací a uzatvárací tag elementu WizardSteps ovládacieho prvku Wizard.
Je mnoho výhod ovládacieho prvku Wizard:
- Jednoduché povolenie viac-krokových formulárov a dátových kolekcii
- Spracováva všetky navigačné aspekty, lineárne alebo nelineárne
- Povoľuje commit-at-finish alebo commit-as-you-go (AllowReturn=false)
- Ovládacie prvky automaticky obdržia viewstate pomedzi správy k rôznym krokom (across
posts to different steps)
- Môže využiť vstavané užívateľské rozhranie alebo sa prispôsobí cez vlastnosti alebo
šablóny
VB Ovládací prvok Wizard
Validačné skupiny
Môžete použiť vlastnosť ValidationGroup, keď chcete uskutočniť oddelené validačné
scenáre na tej istej stránke. Na validačných ovládacích prvkoch a na tlačidle alebo
inom postback ovládacom prvku nastavte meno skupiny, ktorá zapríčiňuje validáciu.
Je to výhodné pri ovládacích prvkoch Wizard, MultiView alebo dátových
ovládacích prvkoch (pre editáciu scenárov). Pre povolenie validačných skupín nastavte
túto vlastnosť na rovnakú hodnotu pre všetky validátory, ktoré majú patriť do rovnakej
skupiny. V ovládacom prvku Button vo formulári s CausesValidation
nastavenou na true môžete taktiež nastaviť vlastnosť ValidationGroup na meno skupiny,
ktorá má byť validovaná po kliknutí na tlačidlo. Štandardne patria všetky validátory
pre spätnú kompatibilitu do skupiny "" (prednastavená skupina). Objekt Page
taktiež vystavuje metódu GetValidators("group") a metódu Validate("group")
pre vyvolanie súboru validátorov v špecifickej skupine. Page.IsValid odzrkadľuje
(súhrnu) platnosť všetkých ovládacích prvkov, ktoré zavolali Validate.
Následujúci príklad ukazuje vlastnosť ValidationGroup. Pre prezretie si správania
sa, kliknite na prvé tlačidlo na stránke (Search), potom kliknite na druhé tlačidlo
na stránke. Všimnite si, že sa po každom kliknutí spúšťa iná skupina validátorov.
VB Validačné skupiny
Focus API a DefaultButton
Focus API Vám dovoľuje sa deklaratívne alebo programovo zamerať na špecifické ovládacie
prvky vo formuláry. Môžete použiť metódu Page.SetFocus na vydanie ID ovládacieho
prvku, ktorý by mal byť zameraný fokus alebo môžete priamo na ovládací prvok zavolať
metódu Focus. Taktiež môžete nastaviť metódu DefaultFocus z elementu
Form na ID ovládacieho prvku, ktorý by mal byť zameraný fokus pri prvom načítaní
stránky. Podobne ako s DefaultFocus môžete nastaviť vlastnosť DefaultButtonz
elementu Form na ID ovládacieho prvku Button, ktorý má submit, keď je stlačená
klávesa Enter vo vnútri niektorého zo vstupných ovládacích prvkov vo formulári.
Ak by mala Vaša stránka mať rozdielne prednastavené tlačidlá závislé od vstupných
ovládacích prvkov, aké má súčasné zamerania, môžete obaliť určité vstupné ovládacie
prvky do ovládacieho prvku Panel a namiesto toho nastaviť Panelu vlastnosť
DefaultButton. Každý vstupný ovládací prvok v Paneli použije pre podanie formulára
vlastnosť DefaultButton, keď je stlačené tlačidlo Enter v rámci vstupného ovládacieho
prvku (input control). Validačná funkcia, ktorá je závislá na Focus API, má hodnotu
SetFocusOnError(A validation feature that depends on the Focus API is SetFocusOnError),
ktorá je nastavená vo validačných ovládacích prvkoch, aby zapríčinila zameranie
prvého neplatného ovládacieho prvku(to cause the first invalid control to receive
focus). Nasledujúci príklad ukazuje vlastnosti Focus API, DefaultButton, DefaultFocus
a SetFocusOnError pri použití na jednom formulári.
VB Focus API, DefaultButton, DefaultFocus a SetFocusOnError
Pre zložitejšie ovládacie prvky nastavuje metóda Focus zameranie štandardne na prvý
zamerateľný ovládací prvok zo zložitejších ovládacích prvkov, ale jednotlivé ovládacie
prvky môže toto správanie kvôli nastaveniu zamerania na iný element preťažiť. Tento
príklad ukazuje zameranie danú prvému vstupnému ovládaciemu prvku v DetailsView,
ak je zavolaná metóda Focus v prípade, že DetailsView je v editačnom režime.
VB DetailsView Focus
Poskytovatelia vytvorenia kompilácii
Poskytovateľ vytvorenia kompilácii v ASP.NET 2.0 je typom, ktorý je registrovaný
"kompilovať" alebo "budovať (build)" deklaratívne súborové formáty do niečoho čo
môže byť použité vo Vašich stránkach. Zabudovaný poskytovateľ je zaregistrovaný
v nastaveniach a priradený k špecifickej prípone súboru. Keď sú súbory s touto príponou
umiestnené do adresári App_Code, ASP.NET vyvolá registrovaného stavajúceho poskytovateľa,
aby skompiloval súbor. ASP.NET 2.0 obsahuje podporu pre niektorých poskytovateľov
alebo si môžete taktiež vytvoriť a zaregistrovať Vaše vlastné typy (pre viacej informácii
pozrite sekciu
Rozširovanie ASP.NET).
V porovnaní so súbormi štandardných tried vo viacerých jazykoch môžu byť nasledujúce
typy automaticky skompilované do ASP.NET:
- .wsdl - vytvorí proxy objekt webovej služby (Web Service proxy object)
- .resx - vytvorí zdrojový súbor, ktorý môže byť použitý na lokalizáciu
-
.xsd - vytvorí silne typový objekt DataSet
Nekompilované stránky
Nekompilované stránky povoľujú zlepšené upravovanie mierky (scaling) pre obrovksé
sídla s tisíckami stránok, kedže okná majú limitovaný počet DLL knižníc načítaných
do aplikácie a bezchybnosť sa znižuje ako sa blížite k limitu. Nastavte direktívu
<%@ Page CompilationMode="Auto" %> na podmienečné kompilovanie
pre získanie (scaling benefits) bez limitou na kóde. Môžete taktiež nastaviť CompilationMode
na "Never", aby ste zabránili stránky v kompilácii. Túto vlastnosť môžete nastaviť
v sekcii <pages/> v Web.config, aby bola táto vlastnosť aplikovaná
na všetky stránky aplikácie. Nekompilovaná stránka vyhodí chybu, ak obsahuje užívateľský
kód. Avšak stále môžete používať deklaratívnu syntax ASP.NET ako sú dátové prepojenia
(data bindings) (iba <%# Eval %> a <%#Bind %>)
a výrazy ako <%$ ConnectionStrings:Pubs %>.
VB Nekompilované stránky (No Compile Pages)
Vlasnosť CompilationMode sa aplikuje iba na stránky, ale stále môžete typy
z vnútra adresára Code (napríklad základné triedy pre stránky). Ak preferujete,
aby mali neskopilované stránky vyňatý prístup ku skomplilovaným typom z adresára
Code, uzamknite tento adresár v nastaveniach.
VB Neskomplilovaná stránka so základnou triedou
Doplnkovým vybavením je predbežný kompilačný nástroj (pre-compile tool), aspnet_compiler.exe,
ktorý Vám dovoľuje predbežne skompilovať (pre-compile) celé sídlo využitím príkazového
riadku, pre ochránenie Vašich intelektuálneho vlastníctva (kódu) na stránkach a
povoľuje uverejnenie bez následnej kompilácie.
Zabezpečenie ne-APS.NET súborov (Securing Non-ASP.NET files)
ASP.NET spracováva požiadavky pre súborové prípony, ktoré sú normálne asociované
s ASP.NET, zatiaľ čo IIS spracováva požiadavky pre všetky ostatné súborové prípony.
Štandardne to znamená, že bežné súborové prípony ako .aspx a .asmx sú spracovávané
ASP.NET-om. Toto spracovávanie zahŕňa autentifikáciu a autorizáciu ASP.NET súborov.
I keď niekedy chcú vývojári, aby boli ne-ASP.NET zdroje spracovávané ASP.NET-om.
Jednou s príčin pre tento úkon je dovoliť, aby ASP.NET autentifikácia a autorizácia
kontrolovala prístup k týmto typom súborov.
Kombinácia IIS6 na Windows Server 2003 a ASP.NET 2.0 poskytuje najväčšiu flexibilitu,
pre beh ASP.NET ako časť spracovania požiadavky pre ne-ASP.NET zdroj. IIS6 obsahuje
podporu, ktorá dovoľuje ASP.NET 2.0 vykonať autentifikačné a autorizačné kroky,
a potom vrátiť zostatok (hand off the remainder) zo spracovania ne-ASP.NET zdroja
späť do IIS6. Je napríklad môožné autentifikovať prístup ku ASP stránke použitím
autentifikácie ASP.NET formulárov, autorizovaného prístupu s ASP.NET Url autorizáciou
a zároveň povoliť ASP ISAPI rozšíreniu (asp.dll) spracovať ASP stránku. Táto podpora
je možná, pretože IIS6 uviedla nové podporovacie serverové funkcie pre ISAPI rozšírenie:
HSE_REQ_EXEC_URL.
Zoberme si, že adresárová štruktúra obsahuje zmes ASP a ASP.NET súborov. ASP.NET
stránky sa používajú na prihlásenie užívateľa využitím formulárovej autentifikácie
(forms authentication), zatiaľ čo ASP stránky reprezentujú zvyšok aplikácie. Pri
použití IIS6 MMC, kliknite pravým tlačidlom na adresár a vytvorte aplikáciu (toto
je rovnaký krok, ktorý je potrebný pri nastavovaní štandardnej ASP.NET aplikácie).
Po vytvorení aplikácie , kliknite na tlačidlo Configuration, ktoré sa nachádza
na (Directory property page). To zapríčiní zobrazenie dialógového okna (dialog)
Application Configuration. Novinkou v IIS6 je funkcia nazvaná wildcard application
mapping. Spodná časť dialógového okna Application Configuration Vám dovoľuje
túto možnosť nastaviť.
Najprv určite cestu pre rozšírenie ASP.NET ISAPI, ktoré spracováva ASP.NET súbory
ako sú .aspx súbory. Túto cestu môžete nájsť pohľadom na prípony zoradené v zozname
Application Extensions, ktorý sa nachádza v hornej polovici dialógového okna
(dialog) Application Configuration. Kliknite na riadok v zozname, ktorý mapuje
prípony .aspx a stlačte tlačidlo (Upraviť) Edit. V dialógovom okne, ktoré
vyskočí (pops-up) vyznačte text v textboxe Executable a skopírujte ho do
prechodnej pamäti. Potom zrušte dialógové okno.
Potom kliknite na tlačidlo (Vložiť) Insert, ktoré sa nachádza v dolnej polovici
dialógového okna Application Configuration. Zobrazí sa dialógové okno pomenované
Add/Edit Application Extension Mapping. Do textboxu Executable vložte
cestu k rozšíreniu ASP.NET ISAPI, ktoré ste si predtým pridali do prechodnej pamäte.
Konečný výsledok by sa mal podobať na screenshot nižšie.
Pre zatvorenie všetkých dialógových okien stlačte OK. Keď je odteraz vytvorená
požiadavka na každý zo súborov, bude požiadavka najprv spracovaná ASP.NET-om. Ak
web.config pre Vašu ASP.NET aplikáciu povolil formulárovú autentifikáciu (forms
authentication), tak neautorizovaná požiadavka .asp súbor najprv spustí presmerovanie
prihlasovaciu stránku (login page) nastavenú pre formulárovú autentifikáciu (forms
authentication). Po úspešnom prihlásení bude užívateľ presmerovaný späť na originálnu
.asp stránku. Keď už-autentifikovaný si užívateľ (now-authenticated user) vyžiada
.asp stránku, tak ASP.NET najprv prejde cez FormsAuthenticationModule,
aby si overil existenciu a platnosť cookie formulárovej autentifikácie (forms authentication
cookie). Aj prejde touto kontrolou, tak ASP.NET vráti spracovanie .asp stránky späť
do IIS6, pričom IIS6 prepošle požiadavku na rozšírenie ISAPI, ktoré za normálnych
okolností spracováva .asp stránky. V tomto prípade je rozšírením asp.dll (the extension
is asp.dll) a ASP stránka nude potom trvať kým nedosiahne koniec (will then run
to completion). Dôvod ASP.NET, prečo vráti požiadavku späť na IIS6 je, že ne-ASP.NET
zdroje neprejdu zoznamom nakonfigurovanom v <httpHandlers> kvôli
nasledujúcemu záznamu (to the following entry):
<add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="True" />
DefaultHttpHandler je zodpovedný za spracovanie požiadaviek späť na
IIS6 pre ďalšie procesovanie.
Podobný postup s nejakými obmedzeniami je k dispozícii pre IIS5 a IIS5.1. Tieto
IIS verzie požadujú, že pre každú súborovú príponu, ktorú chce vývojár procesovať
ASP.NET-om, musí byť do zoznamu Application Extensions, ktorý bol už spomenutý
skôr, pridané explicitné mapovanie ASP.NET ISAPI rozšírenia. Druhým obmedzením je,
že IIS 5.x nedovoľuje, aby bola požiadavka vrátená z ASP.NET späť do IIS 5.x. Ako
výsledok môžu byť ASP.NET-om efektívne chránené iba statické súbory požadované (GET
verb). Po spracovaní prvej časti (ASP.NET pipeline) (ktorá obsahuje autentifikáciu
a autorizáciu), ASP.NET spracuje zdroje použitím optimalizovaného StaticFileHandler,
ako sa pokúšať o vrátenie požiadavky spať do IIS 5.x. Pokusy spracovať (POST verb)
alebo si vyžiadať .asp súbory vyústia do chybovej hlášky 405 (neplatná metóda),
resp. 403 (neprístupné: prístup zamietnutý).
Funkcie klientského skriptovania (Client-Script Features)
ASP.NET 2.0 obsahuje množstvo funkcii, ktoré sa spoliehajú na skripty na strane
klienta v prehliadači(rely on client-side script in the browser). Napríklad vlastnosť
OnClientClick ovládacieho prvku Button Vám dovoľuje programovo spustiť
skript na strane klienta (client-side script), ak je stlačené tlačidlo (Button).
Tlačidlo (Button) (renders) atribút na strane klienta onclick spolu
s vlastným javascript-om tlačidla (button's own javascript).
VB Udalosť ClientClick
Sú prípady, keď si aplikácia vyžaduje, aby pozícia stránky v prehliadači zotrvala
po (post-back) na server. Napríklad ak dátová položka zapríčiňuje postback vo veľkej
stránke, koncový užívateľ by sa potreboval preskrolovať (scroll) na pozíciu, ktorú
editoval, aby mohol ďalej pokračovať. Vývojári stránok môžu jednoducho označiť svoje
formuláre pre udržiavanie naskrolovanej pozície nastavením vlastnosti MaintainScrollPositionOnPostBack
na hodnotu true v direktíve @Page alebo nastavením tejto vlastnosti
vo Web.config, pre použitie tejto vlastnosti na všetky stránky aplikácie.
VB Maintain Scroll Position
Novou vzrušujúcou funkciou pre ovládacie prvky sú Client-side CallBacks,
ktoré dovoľujú ovládaciemu prvku spustiť požiadavku späť na server pre získanie
dodatočných dát, bez odosielania celej stránky. Táto funkcia sa spolieha na podporu
prehliadača spracovanie (zvyčajne cez XMLHTTP), ktorá je špecifikovaná vlastnosťou
SupportsClientCallbacks v schopnostiach prehliadača (as specified by
the SupportsClientCallbacks property in browser capabilities).
Ovládací prvok TreeView využíva výhody tejto funkcie pre povolenie , ak je
rodičovský uzol rozvinutý u klienta . GridView a DetailsView taktiež
využívajú výhody tejto funkcie pre implementovanie stránkovania a triedenia, ak
EnableSortingAndPagingCallbacks nastavená na hodnotu true. Ovládací prvok
sa zaregistruje sám, pritom ako je schopný prijímať udalosti implementovaním rozhrania
ICallbackEventHandler. Toto rozhranie dovoľuje stránke vyvolať registrovaných
zástupcov pre vrátenie dát klientovi. Sú dve metódy rozhrania ICallBackHandler,
RaiseCallbackEvent a GetCallbackResult. RaiseCallbackEvent
prijíma argumenty pre kontext (argumenty poslané od klienta), ktoré môžu byť použité
pre spracovanie udalostí. GetCallbackResult vracia reťazec, ktorý reprezentuje dáta,
ktoré sa majú vrátiť ku klientovi. Dôvod, prečo je toto rozhranie rozdelené do dvoch
metód, je aby bolo možné asynchronné procesovanie, napríklad vyvolanie dát z ovládacieho
prvku data source. Ovládací prvok potom zaregistruje callback funkciu na strane
klienta, ktorá dokáže vytvoriť argumenty pre odoslanie ku serverovým delegátom,
a aby bola vyvolaná funkcia spracovania chýb, v prípade ak pri procesovaní callbacku
nastane chyba. Nakoniec vydá ovládací prvok referencie událostí použitím Page.ClientScript.GetCallBackEventReference.
Nasledujúci príklad ukazuje použitie klientských callback funkcií pre implementáciu
scenáru kaskadujúceho ovládacieho prvku DropDownList. V tomto prípade samotná stránka
za účelom demoštrácie implementuje rozhranie ICallbackEventHandler.
VB CallBack Event Handlers
|
|