Starší komentáře ke článku: ViewState v ASP.NET aplikacích - implementace a použití

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Rene Stein

Datum vložení: 13.5.2004 11:27:59

"Objekt ViewState je instancí třídy StateBag, která umožňuje ukládání dvojic název-hodnota. "

To je zcela nedostatecny popis, ukladani dvojice nazev-hodnota umoznuji i dalsi objekty (Hashtable, NameValueCollection) Specifikem tridy StateBag je ukladani takzvanych "dirty" priznaku, ktere rikaji, zda dana polozka byla behem renderovani stranky od Init faze zmenena a ze ma byt ulozena do ViewState.


public string Text {
get {
return (string) ViewState["Text"];
}
set {
ViewState["Text"] = value;
}
}

Serverove ovladaci prvky vzdy dodrzuji konvenci, ze (nejen) z vlastnosti jejichz typem je string, se nevraci null. Toto pravidlo je dulezite, protoze jinak nutite programatora (uzivatele prvku) psat kvanta zbytecne rozhodovaci logiky, ktery testuje, zda nahodou vlastnost nevratila null. Vlastnost musi vracet String.Empty.

public string Text {
get {
string text = (string) ViewState["Text"];
return (text == null? String.Empty : text);
}
set {
ViewState["Text"] = value;
}
}

"Díky tomu je také možné uložit do ViewState pouze serializovatelné objekty."

To je opet jen cast pravdy. Do ViewState mohou byt ukladany a casto se tak i deje objekty z tridy, k niz je prirazen TypeConverter.

"Zmíněné metody LoadViewState a SaveViewState je možné překrýt a naprogramovat si vlastní logiku uložení proměnných prvku do ViewState. Ve většině prvků, které nevyžadují speciální vlastnosti, to však není nutné a je možné použít výchozí implementaci."

T je velmi obecna veta - co myslite temi "specialnimi" vlastnostmi? Vlastnosti nemusi byt "specialni", snad u kazdeho prvku existuje komplexni vlastnost (tedy vlastnost, jejimz typem neni primitivni typ (string, int...)). Metody LoadViewState a SaveViewState je pak nutne prekryt vzdy, protoze nas serverovy ovladaci prvek uklada ViewState i teto vlastnosti. Dale take komplexni vlastnost, ktera neni odvozena z tridy Control musi poskytnout vlastni implementaci rozhrani IStateManager. Takze s prostinkym ukladanim hodnot pomoci vlastnosti ViewState ovladacich prvku si vetsinou nevystacime. Viz muj clanek - <a href='http://interval.cz/clanek.asp?article=3210' target='_blank'>http://interval.cz/clanek.asp?article=3210</a>

Rene Stein

Avatar

Autor komentáře: Zdeněk Drlík

Datum vložení: 13.5.2004 11:39:31

Souhlasím s Vámi, tento článek byl však koncipován spíše jako "nutné teoretické minimum" pro uvedení do problematiky použití ViewState a slouží pro zorientování se v problematice pro příští článek, který se zabývá implementací ukládání ViewState do serverových úložišť. Proto nazabíhá příliš do podrobností které s implementací ukládání ViewState přímo nesouvisí (překrytí LoadViewState, SaveViewState apod.).

Avatar

Autor komentáře: Zdeněk Drlík

Datum vložení: 13.5.2004 11:47:50

Ještě k těm speciálním vlasnostem - jsou tím myšleny jakékoliv vlastnosti neprimitivního typu. Nicméně Vaše zobecnění "snad u kazdeho prvku existuje komplexni vlastnost (tedy vlastnost, jejimz typem neni primitivni typ" je poměrně dost silné, protože znám a dost často používám odvozené ovládací prvky (děděné ze standardních), které přidávají pouze vlastnosti primitivních typů, takže v těchto případech vystačím s výchozí implementací... ;-)

Avatar

Autor komentáře: Arkady

Datum vložení: 13.5.2004 12:26:03

Diky za pekny clanek, jakozto .NET samouk ocenuji fundovane clanky, jen bych mel malilinkatou (vlastne jeste mensi) vytku ke slohu :)
U temat ktera chapu a rozumim jim mi to divne neprijde. Ovsem pokud ctu neco co neznam prilis dobre, tak souveti pres nekolik radku s vedlejsimi vetami a vsuvkami si musim precist nekolikrat abych ho pochopil. Odvadi to dost pozornost od samotneho tematu. To jen k pripadnym dalsim clankum. Na druhou stranu lepsi takovyto clanek nez vubec zadny ;)
Na tohle byly vyborne knizky ze serie "Idiot's Guide to ..."

Avatar

Autor komentáře: Ondrej Ivanic

Datum vložení: 14.5.2004 9:32:27

Niektory ludia su obcas lenive prasata a do viewstate si dokazu ulozit kopu veci. zrazu nieje problem sa dostat k stranke na ktorej je zopak kb textu, ale nacita sa nehorazne dlho lebo viewstate je obludne velky.

Avatar

Autor komentáře: Jan Vacek

Datum vložení: 14.5.2004 21:08:46

V jedné nejmenované firmě v olomouckém kraji vyvíjí jednu aplikaci pracující pro agentůru CzechIndustry, která z datasetu pro každej datovej grid cpe data do Viewstate.
Vlastní stránka má třeba 2kb a viestate má nezřídka i 200 kb. A jejich uživatelé si dokonce stěžují, že je aplikace pomalá... :o)
To jen tak mimochodem...

Avatar

Autor komentáře: FilX

Datum vložení: 13.1.2006 20:51:50

A jak je to s Instancemi vlastních tříd? Je možné je ukládat do ViewState? Popřípadě jak. Mám klasickou třívrstvou architekturu a potřeboval bych vytvářet a uchovávat instance tříd v rozsahu jedné stránky. Zatím to řeším pomocí session ale bohužel session je Globální pro všechny stránky aplikace v rámci jednoho clienta. Takže hrozí nebezpečí vytvoření stejného klíče. Máte s tím někdo zkušenosti ??? Jak tento problém řešit. Nechci při každém Post Backu vytvářet znovu instance tříd když už jednou byly vytvořeny.

Zpět na článek | Úvodní stránka Interval.cz