ViewState: Novinky v ASP.NET 4.0

V předchozích článcích této série jsem popsal implementaci ViewState a ControlState v aktuální verzi ASP.NET, tedy 3.5 SP1. V tomto, posledním, článku se podíváme do budoucnosti: na novinky, které nás čekají ve verzi 4.0. Mnou popisovaný stav se týká verze Beta 1 a je dobré ho tedy brát s rezervou – zde prezentované informace se mohou ještě změnit.

ASP.NET 4.0 změní logiku zapínání a vypínání ViewState. Dosavadní vlastnost EnableViewState sice zůstává zachována, ale jenom na úrovni aplikace nebo stránky. Na úrovni jednotlivého controlu bude ignorována. Tímto způsobem tedy nebude možné ViewState u jednotlivých ovládacích prvků vypnout. Zůstává také zachováno chování, že touto metodou vypnutý ViewState nelze na nižší úrvni zapnout.

Přibyla ale nová vlastnost ViewStateMode, která může nabývat hodnot Enable, Disable a Inherit. Výchozí hodnota je Inherit. Pokud tímto způsobem na nadřízené úrovni ViewState vypnete, na nižší úrovni ji můžete zase zapnout. Například v následující stránce bude ViewState povoleno pouze u prvku SampleStateControl1:

<%@ Page Language="C#" ViewStateMode="Disabled" %>

<%@ Register TagPrefix="sample" Namespace="MyControls" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <sample:SampleStateControl ID="SampleStateControl1" runat="server" ViewStateMode="Enabled" />

    <sample:SampleStateControl ID="SampleStateControl2" runat="server" />

    <asp:Button ID="Button1" Text="Submit" runat="server" />

    </form>

</body>

</html>

Ve verzi Beta 1 se mi nepodařilo přijít na způsob, jak ViewState tímto způsobem (tedy s možností ho na vyžádání zapnout) vypnout pro celou aplikaci, tedy konfiguračně. Nevím, zda je to úkaz rázu trvalého a nebo jenom dočasného, v této betě. I kdyby se ale jednalo o úkaz rázu trvalého, je to pořád výrazný krok kupředu. A protože ViewStateMode lze nastavit i na úrovni master page, není absence této vlastnosti příliš truchlivá. Většina webů používá jenom jednu hlavní master page, takže nastavení na její úrovni je funkčně ekvivalentní nastavení na úrovni aplikace.

Pokud s chcete s touto funkcionalitou pohrát, můžete – beta 1 je volně ke stažení na webu Microsoftu. V takovém případě by se vám mohlo nicméně hodit moje upozornění, že IntelliSense dosud vlastnost ViewStateMode zná jenom u běžných controlů, nikoliv tedy u direktiv jako je @Page nebo @Master. Pokud je tam nicméně "natvrdo" napíšete, všechno bude spokojeně fungovat.

Tímto článkem končí stručná série o vlastnostech, využití a implementaci technologie ViewState. Doufám, že se mi podařilo odstranit některé mýty, které o ViewState v programátorských kruzích panují, a že nyní budete ViewState a ControlState využívat správným a případným způsobem.

Titulek:
Text komentáře:
Vaše jméno:
Váš e-mail: (nebude zveřejněn)

WWW stránka:
Opište text z obrázku:
odpovědětodpovědět Gravatar

Kompatibilita?

Konečně! Tenhle přístup mi trochu chyběl. Na druhou stranu to ale znamená, že pokud rozběhám ASP.NET aplikaci, kde používám EnableViewState na úrovni ovládacích prvků pod FW 4, tak mi může tiše nabobtnat ViewState? To by se mohlo stát například updatováním ze strany hostingové společnosti.

Jo a všimnul jsem si jedné drobnosti při publikaci komentářů. Pokud zadám nevalidní WWW adresu a odešlu formulář, tak mi stránka oznámí, že adresa není validní. Bohužel mi ale za trest mi schová tlačítko "Odeslat komentář", takže příspěvek nelze následně vložit.

  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET