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.