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, DisableInherit. 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.