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.