Exportovat (0) Tisk
Rozbalit vše

Přehled životního cyklu stránky technologie ASP.NET

.NET Framework 4

Při běhu stránky technologie ASP.NET stránka prochází životním cyklem, ve kterém provádí sérii procesních kroků. Jedná se o inicializaci, instanciování ovládacích prvků, obnovení a udržování stavu, běh kódu obslužné rutiny událostí a vykreslování. Je důležité porozumět životnímu cyklu stránky, abyste mohli psát kód v odpovídající fázi životního cyklu pro dosažení požadovaného efektu.

Pokud vyvíjíte vlastní ovládací prvky, musíte být s životním cyklem stránky seznámeni proto, abyste mohli korektně inicializovat ovládací prvky, vyplňovat vlastnosti ovládacích prvků daty stavu zobrazení a spouštět kód chování ovládacího prvku. Životní cyklus ovládacího prvku je založen na životním cyklu stránky. Stránka přitom vyvolává mnoho událostí, které musíte pomocí vlastního ovládacího prvku zpracovávat.

Toto téma obsahuje následující oddíly:

Obecně řečeno stránka prochází fázemi popsanými v následující tabulce. Kromě fází životního cyklu stránky existují ještě fáze aplikace, které se odehrávají před a po požadavku, ale nejsou pro stránku specifické. Další informace naleznete v části Úvod do životního cyklu aplikace technologie ASP.NET a Přehled životního cyklu aplikace technologie ASP.NET služby IIS 7.0.

Některé části životního cyklu probíhají jen tehdy, je-li stránka zpracovávána jako postback. Pro postbacky je životní cyklus stránky stejný pro částečný postback stránky (ke kterému dochází při použití ovládacího prvku UpdatePanel) i pro postback celé stránky.

Fáze

Popis

Žádost na stránku

K žádosti na stránku dochází před začátkem životního cyklu stránky. Když stránku žádá uživatel, technologie ASP.NET určí, zda je stránku nutné rozebrat a kompilovat (tím vlastně začíná život stránky), nebo zda lze jako odpověď zaslat stránku uloženou v mezipaměti bez nutnosti spouštění stránky.

Start

Při spuštění stránky jsou nastaveny vlastnosti stránky, jako jsou Request a Response. V této fázi také stránka určí, zda je žádost postbackem nebo novým požadavkem a nastaví hodnotu vlastnosti IsPostBack. Stránka také nastaví vlastnost UICulture.

Inicializace

Během inicializace stránky jsou k dispozici ovládací prvky stránky a jsou nastaveny všechny vlastnosti UniqueID ovládacích prvků. Pokud je to možné, jsou použity také motivy a hlavní stránka. Pokud je aktuální žádost postbackem, nebyla data postbacku ještě načtena a hodnoty vlastností ovládacích prvků nebyly obnoveny na hodnoty ze stavu zobrazení.

Načítání

Pokud je aktuální požadavek postbackem, jsou během načítání vlastnosti ovládacích prvků naplněny informacemi získanými ze stavu zobrazení a stavu ovládacích prvků.

Zpracovávání událostí postbacku

Pokud je požadavek postbackem, jsou zavolány obslužné rutiny ovládacích prvků. Poté je zavolána metoda Validate všech validačních ovládacích prvků, čímž dojde k nastavení vlastností IsValid jednotlivých validačních ovládacích prvků a stránky.

Vykreslení

Před vykreslením se uloží stav zobrazení stránky a všech ovládacích prvků. Během vykreslovací fáze stránka zavolá metodu Render pro každý ovládací prvek a poskytne tak zapisovač textu, který zapíše výstup do objektu OutputStream vlastnosti Response stránky.

Uvolnit

Poté, co je stránka kompletně vykreslena, zaslána klientovi a je připravena k odstranění, je vyvolána událost Unload. V tomto okamžiku jsou vlastnosti stránky, například Response a Request, uvolněny a je provedeno vyčištění.

V každé fázi životního cyklu stránka vyvolává události, které můžete obsluhovat vlastním kódem. Události ovládacích prvků jsou svázány s obslužnými rutinami události buď deklarativně pomocí atributů jako je například onclick, nebo pomocí kódu.

Stránky také podporují automatické připojování událostí, což znamená, že se technologie ASP.NET podívá po metodách s určitými názvy a ty v případě vyvolání určitých událostí zavolá. Pokud je atribut AutoEventWireup instrukce @ Page nastaven na hodnotu true, jsou události stránky automaticky vázány na metody, které mají své názvy tvořeny způsobem Page_událost, tedy například Page_Load a Page_Init. Další informace o automatickém přiřazování událostí naleznete v tématu Model událostí ovládacích prvků webového serveru technologie ASP.NET.

Následující tabulka vyčítá události životního cyklu stránky, které budete používat nejčastěji. Existují také další události, které v seznamu nejsou, ale ty nejsou ve většině případů využity. Používají je hlavně ovládací prvky serveru webové stránky technologie ASP.NET k inicializaci a vykreslení sebe sama. Pokud si chcete napsat vlastní ovládací prvky serveru technologie ASP.NET, budete muset těmto událostem rozumět podrobněji. Další informace o vytváření vlastních ovládacích prvků naleznete v tématu Vývoj vlastních serverových ovládacích prvků ASP.NET.

Událost stránky

Typické použití

PreInit

Je vyvolána po dokončení spouštěcí fáze a před začátkem inicializační fáze.

Tuto událost použijte pro následující:

  • Kontrola vlastnosti IsPostBack, zda se jedná o první případ zpracování dané stránky. V tuto chvíli došlo také k nastavení vlastností IsCallback a IsCrossPagePostBack.

  • Vytváření nebo opětovné vytváření dynamických ovládacích prvků.

  • Dynamické nastavení hlavní stránky.

  • Dynamické nastavení vlastnosti Theme.

  • Čtení nebo nastavení hodnot vlastnosti profilu.

    PoznámkaPoznámka
    Pokud je žádost postbackem, nebyly hodnoty ovládacích prvků ještě ze stavu zobrazení obnoveny.Pokud v tuto chvíli nastavíte vlastnost ovládacího prvku, může dojít k jejímu přepsání v další události.

Init

Vyvolána poté, co byly inicializovány všechny ovládací prvky a použita všechna nastavení motivů. K události Init jednotlivých ovládacích prvků dojde před událostí Init stránky.

Tuto událost použijte ke čtení nebo inicializaci vlastností ovládacích prvků.

InitComplete

Je vyvolána na konci inicializační fáze stránky. Pouze jedna operace se odehrává mezi událostmi Init a InitComplete: sledování změn stavu zobrazení je zapnuto. Sledování stavu zobrazení umožňuje ovládacím prvkům zachovat hodnoty, které jsou programově přidány ke kolekci ViewState. Až do zapnutí sledování stavu zobrazení jsou všechny hodnoty přidané do stavu zobrazení během postbacků ztraceny. Ovládací prvky obvykle zapínají sledování stavu zobrazení ihned poté, co vyvolají svou událost Init.

Tuto událost použijte k provedení změn ve stavu zobrazení, který chcete zachovat i po dalším zpětném odeslání.

PreLoad

Je vyvolána poté, co stránka stav zobrazení sebe sama a všech ovládacích prvků a poté, co zpracuje data postbacku zahrnutá v instanci Request.

Load

Objekt Page volá metodu OnLoad v objektu Page a poté rekurzivně provede totéž s každým podřízeným ovládacím prvkem a všemi načtenými ovládacími prvky. K události Load jednotlivých ovládacích prvků dojde po události Load stránky.

Metodu události OnLoad použijte k nastavení vlastností ovládacích prvků a k navázání připojení k databázím.

Události ovládacích prvků

Tyto události použijte k ošetření specifických událostí ovládacích prvků, jako je například událost ovládacího prvku Button s názvem Click nebo událost ovládacího prvku TextBox s názvem TextChanged.

PoznámkaPoznámka
Pokud stránka obsahuje validační ovládací prvky, zkontrolujte v události postbacku vlastnost IsValid v Page a v jednotlivých validačních ovládacích prvcích a teprve poté se pusťte do dalšího zpracovávání.

LoadComplete

Je vyvolána na konci fáze zpracování událostí.

Tuto událost použijte k úlohám, které vyžadují načtení všech ostatních ovládacích prvků stránky.

PreRender

Je vyvolána poté, co objekt Page vytvoří všechny ovládací prvky, které jsou zapotřebí k vykreslení stránky včetně podřízených ovládacích prvků složených ovládacích prvků. (Objekt Page tohoto dosahuje voláním EnsureChildControls pro všechny ovládací prvky a pro stránku.)

Objekt Page vyvolá událost PreRender na objekt Page a poté rekurzivně provede totéž se všemi podřízenými ovládacími prvky. K události PreRender jednotlivých ovládacích prvků dojde po události PreRender stránky.

Tuto událost využijte k provedení posledních změn na obsahu stránky nebo jejích ovládacích prvcích před započetím fáze vykreslování.

PreRenderComplete

Je vyvolána poté, co všechny ovládací prvky vázané na data, jejichž vlastnost DataSourceID je nastavena, zavolají svou metodu DataBind. Další informace naleznete v oddíle Události datových vazeb pro ovládací prvky vázané na data dále v tomto tématu.

SaveStateComplete

Je vyvolána po uložení stavu zobrazení a kontrolního stavu pro stránku a všechny její ovládací prvky. Veškeré změny provedené nyní na stránce nebo v ovládacích prvcích se projeví ve vykreslení, ale nebudou načteny při příštím zpětném odeslání.

Render

Toto není událost; v této fázi zpracovávání objekt Page volá tuto metodu na všechny ovládací prvky. Všechny serverové ovládací prvky technologie ASP.NET mají metodu Render, která vypisuje kód ovládacího prvku pro odeslání do prohlížeče.

Při vytváření vlastního ovládacího prvku obvykle tuto metodu přepíšete tak, aby výstupem byl kód ovládacího prvku. Nicméně pokud váš vlastní ovládací prvek obsahuje pouze standardní ovládací prvky webového serveru technologie ASP.NET a neobsahuje žádný vlastní kód, nemusíte metodu Render přepisovat. Další informace naleznete v tématu Vývoj vlastních serverových ovládacích prvků ASP.NET.

Uživatelský ovládací prvek (soubor .ascx) automaticky zahrnuje vykreslování, takže není třeba ovládací prvek v kódu vykreslovat explicitně.

Unload

Je vyvolána pro každý ovládací prvek a poté pro stránku.

V ovládacích prvcích slouží tato událost k poslednímu čištění specifických ovládacích prvků, například k uzavření databázových připojení závislých na ovládacích prvcích.

Pro stránku samotnou slouží tato událost k poslednímu čištění, například k uzavření otevřených souborů a databázových připojení, nebo k dokončení přihlašování nebo jiných úkolů závislých na požadavcích.

PoznámkaPoznámka
Během fáze odstraňování jsou stránka i ovládací prvky vykresleny, takže už nemůžete provádět další změny v odpovědním proudu.Pokud se pokusíte zavolat metodu jako je například Response.Write, vyvolás stránka výjimku.

Jednotlivé serverové ovládacích prvky technologie ASP.NET mají svůj vlastní životní cyklus, který je podobný životnímu cyklu stránky. Například k událostem Init a Load ovládacích prvků dochází během příslušných událostí stránky.

Ačkoliv k Init a Load dochází rekurzivně u všech ovládacích prvků, dějí se v obráceném pořadí. K události Init (a také k události Unload) u každého podřízeného ovládacího prvku dochází před vyvoláním příslušné události pro jeho kontejner (zdola nahoru). Nicméně k události Load pro kontejner dojde před událostí Load jeho podřízených ovládacích prvků (shora dolů).

Když vytvoříte třídu, která dědí z třídy Page, můžete kromě obsluhy událostí vyvolaných stránkou také přepsat metody ze základní třídy stránky. Například můžete přepsat metodu InitializeCulture stránky, abyste mohli dynamicky nastavovat kulturní informace. Všimněte si, že při vytvoření obslužné rutiny událostí pomocí syntaxe Page_událost, je implicitně volána základní implementace, a proto ji nemusíte volat ve své metodě. Například metoda OnLoad třídy základní stránky je volána vždy, ať už vytvoříte metodu Page_Load nebo ne. Pokud však metodu OnLoad stránky přepíšete klíčovým slovem override (v jazyce Visual Basic je klíčovým slovem Overrides), musíte explicitně zavolat bázovou metodou. Například pokud na stránce přepíšete metodu OnLoad, musíte zavolat base.Load (v jazyce Visual Basic to je MyBase.Load), aby byla spuštěna nadřazená implementace.

Následující obrázek ukazuje některé z nejdůležitějších metod třídy Page, které můžete přepsat, aby bylo možné přidávat kód, který se provádí v určitých bodech cyklu stránky. (Úplný seznam metod a událostí stránky naleznete v třídě Page.) Tento obrázek také ukazuje, jak tyto metody souvisí s událostmi stránky a událostmi ovládacího prvku. Pořadí metod a událostí na obrázku je shora dolů a v rámci každého řádku zleva doprava.

Diagram životního cyklu stránky ASP.NET

Pokud jsou ovládací prvky vytvořeny dynamicky za běhu nebo deklarativně v šablonách ovládacích prvků vázaných na data, jejich události nejsou zprvu synchronizovány s událostmi ostatních ovládacích prvků na stránce. Například u ovládacího prvku přidaného za běhu může k událostem Init a Load dojít v životním cyklu stránky mnohem později než u stejných událostí vytvořených deklarativně. Dynamicky přidané ovládací prvky a ovládací prvky v šablonách se proto od chvíle svého instanciování snaží postupně vyvolávat své události, dokud nedoženou událost, během níž došlo k jejich přidání ke kolekci Controls.

Abyste lépe pochopili vztah mezi životním cyklem stránky a událostmi vázání dat, je v následující tabulce uveden seznam události vázaných na data v ovládacích prvcích vázaných na data, jako jsou například ovládací prvky GridView, DetailsView a FormView.

Událost ovládacího prvku

Typické použití

DataBinding

Je vyvolána po události PreRender ovládacího prvku, ke které dochází po události PreRender stránky. (Toto platí pro ovládací prvky, jejichž vlastnost DataSourceID je nastavena deklarativně. V opačném případě k této události dojde při zavolání metody DataBind ovládacího prvku.)

Tato událost označuje začátek procesu navázání ovládacího prvku k datům. Tato událost slouží k manuálnímu otevření databázových připojení, pokud je to nutné, a k dynamickému nastavení hodnot parametrů před spuštěním dotazu.

RowCreated (pouze GridView) nebo ItemCreated (ovládací prvky DataList, DetailsView, SiteMapPath, DataGrid, FormView, Repeater a ListView)

Je vyvolána po události DataBinding ovládacího prvku.

Tuto událost použijte k manipulaci s obsahem, který není závislý na datové vazbě. Například v době spuštění můžete programově přidat formátování záhlaví nebo zápatí řádku v ovládacím prvku GridView.

RowDataBound (pouze GridView) nebo ItemDataBound (ovládací prvky DataList, SiteMapPath, DataGrid, Repeater a ListView)

Je vyvolána po události RowCreated nebo ItemCreated ovládacího prvku.

Při vyvolání této události jsou data k dispozici v řádku nebo v položce, aby je bylo možné naformátovat, nebo nastavit vlastnost FilterExpression podřízených ovládacích prvků zdroje dat tak, aby bylo možné zobrazit příslušná data v řádku nebo v položce.

DataBound

Je vyvolána na konci operací vázání dat v ovládacích prvcích vázaných na data. V ovládacím prvku GridView je proces datové vazby dokončen u všech řádků a všech podřízených ovládacích prvků.

Tuto událost využijte k formátování obsahu vázaného na data nebo k zahájení vazby dat v ostatních ovládacích prvcích, které závisí na hodnotách obsahu aktuálního ovládacího prvku. (Další informace naleznete v tématu Zachytávání událostí u přidaných ovládacích prvků na jiném místě v tomto tématu.)

Vnořené ovládací prvky vázané na data

Pokud je podřízený ovládací prvek vázán na data, ale jeho kontejner ještě není na data navázán, může dojít k desynchronizaci dat v podřízeném ovládacím prvku a dat v kontejneru. Na to je třeba pamatovat obzvláště, když data v podřízeném ovládacím prvku provádějí operace závislé na hodnotách dat vázaných v kontejneru.

Předpokládejme například, že máte ovládací prvek GridView, který zobrazuje v každém řádku záznam o společnosti a seznam vedoucích pracovníků společnosti v ovládacím prvku ListBox. K vyplnění seznamu vedoucích pracovníků byste připojili ovládací prvek ListBox k ovládacímu prvku zdroje dat (například SqlDataSource), který by data o vedoucích pracovnících společnosti načetl za použití parametru CompanyID v dotazu.

Pokud jsou u ovládacího prvku ListBox vlastnosti datové vazby, například DataSourceID a DataMember nastaveny deklarativně, pak se ovládací prvek ListBox pokusí navázat svůj zdroj dat během události příslušného řádku DataBinding. Nicméně pole CompanyID v řádku neobsahuje žádnou hodnotu až do chvíle, kdy ovládací prvek GridView vyvolá událost RowDataBound. V takovém případě je podřízený ovládací prvek (ovládací prvek ListBox) navázán dříve než je navázán příslušný ovládací prvek (GridView), takže dojde k desynchronizaci fází vazby dat.

Aby k této situaci nedošlo, umístěte ovládací prvek zdroje dat pro ovládací prvek ListBox do stejné položky šablony jako ovládací prvek ListBox samotný a nenastavujte vlastnosti vazby dat ovládacího prvku ListBox deklarativně. Namísto toho je nastavujte programově v průběhu události RowDataBound, aby ovládací prvek ListBox nenavázal svá data dříve, než budou k dispozici informace o CompanyID.

Další informace naleznete v tématu Vazba dat pomocí ovládacího prvku zdroje dat.

Ovládací prvek Login může používat nastavení v souboru Web.config k automatické správě ověření členství. Nicméně pokud vaše aplikace vyžaduje úpravu funkčnosti ovládacího prvku, nebo chcete rozumět tomu, jak si stojí události Login ovládacího prvku v relaci k životnímu cyklu stránky, můžete použít události vyjmenované v následující tabulce.

Událost ovládacího prvku

Typické použití

LoggingIn

Je vyvolána během postbacku po vyvolání události LoadComplete stránky. Tato událost označuje začátek přihlašovacího procesu.

Tuto událost použijte k úkolům, které je třeba vykonat před začátkem ověřovacího procesu.

Authenticate

Je vyvolána po události LoggingIn.

Tuto událost využijte k přepsání nebo rozšíření výchozího ověřovacího chování ovládacího prvku Login.

LoggedIn

Je vyvolána po ověření uživatelského jména a hesla.

Tuto událost využijte k přesměrování na jinou stránku nebo k dynamickému nastavení textu v ovládacím prvku. K této události nedojde, pokud se objeví chyba, nebo selže ověření.

LoginError

Je vyvolána, pokud není ověření úspěšné.

Tuto událost použijte k nastavení textu ovládacího prvku, ve kterém vysvětlíte problém, nebo k přesměrování uživatele na jinou stránku.

Obsah vytvořený komunitou

Přidat
Zobrazit:
© 2015 Microsoft