2011-01-01 2 views
1

Sur ma page Web j'ai PlaceHolder, pas de contrôles sont chargés dedans.ASP.NET - ViewState: espace réservé vide génère l'état d'affichage

<asp:PlaceHolder ID="PlaceHolderStatMain" runat="server"> 
</asp:PlaceHolder> 

Je cherche le ViewState généré pour la page, il est la suivante:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJLTg1NDkyNTUzD2QWAgIDD2QWAgIND2QWAmYPZBYCAgEPZBYCZg9kFgJmD2QWBmYPFQEYL3N0YXRfc3RhZGl1bS9sZWFndWVfV0VGZAIBDxUBGC9zdGF0X3N0YWRpdW0vbGVhZ3VlX0VFRmQCAg8VARgvc3RhdF9zdGFkaXVtL2xlYWd1ZV9GQ1VkZEuSBUr5LFL6WfCehNBJgjrq0GzwWCWN2qlU70V7LAAb" /> 

Quand je mets EnableViewState false:

<asp:PlaceHolder ID="PlaceHolderStatMain" runat="server" EnableViewState="false"> 
</asp:PlaceHolder> 

La teneur en viewstate a diminué de manière significative:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJLTg1NDkyNTUzZGTTn8Y28VwmpE/K7yPPkLFvhrqMdU8THijFW/BMFzk0tQ==" /> 

Question: comment supprimer le contenu viewstate "inutile" sans désactiver viewstate pour l'espace réservé lui-même (je voudrais que d'autres contrôles chargés dans l'espace réservé aient viewstate)?

Est-ce possible?

Toutes les pensées sont les bienvenues!

P.S. J'utilise ASP.NET 4.0

Répondre

1

Dans ASP.Net 4.0, vous pouvez désactiver viewstate pour la page avec le paramètre ViewStateMode et l'activer pour les contrôles qui en ont besoin. Label1 aura viewstate et Label2 non car il hérite de l'état Disabled de la page.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" 
    ViewStateMode="Disabled" Inherits="_Default" %> 

<!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 id="Head1" runat="server"> 
    <title>View State Demo in ASP.NET 4.0</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="Label1" runat="server" Text="One" ViewStateMode="Enabled"></asp:Label><br /> 
     <asp:Label ID="Label2" runat="server" Text="Two"></asp:Label> <br /><br />  
     <asp:Button ID="Button1" runat="server" Text="PostBack" /> 
     </div> 
    </form> 
    </body> 
</html> 
+0

Vous proposez donc de désactiver ViewState pour l'espace réservé, mais si certains contrôles en ont besoin, je devrai l'activer explicitement pour des contrôles particuliers. Ai-je raison? – Budda

+0

Oui, votre autre option est ce que nous avions avant, désactivez-la pour tous ceux qui n'en ont pas besoin. Une autre méthode consiste à créer une application MVC, qui est sans état et n'utilise pas ViewState. Mais l'utilisation de MVC est un style différent de création d'applications. Vous pouvez également utiliser des astuces pour stocker le viewstate sur le serveur ou le compresser pour économiser de l'espace, si cela vous concerne. –

+0

MVC n'est pas une option ... J'ai un site web qui n'est pas faisable pour être réécrit sur MVC. Et il n'y a pas de contrôle à l'intérieur de PlaceHolder, donc il n'y a rien à désactiver sauf de l'espace réservé lui-même. Heureusement, l'application est recompilée sous asp.net 4.0, donc je peux aller de l'avant avec cette suggestion. Mais les autres (le cas échéant) sont également les bienvenus! – Budda