2009-10-10 7 views

Répondre

19

Vous avez plusieurs options pour réduire le ViewState:

  • Désactiver ViewState pour les contrôles qui ne ont pas besoin (ce qui est la solution la plus efficace). Par exemple. Si vous pouvez mettre en cache des données sur le serveur, vous pouvez relier les contrôles de base de données à chaque requête et il n'est pas nécessaire de tout sauvegarder dans ViewState.
  • Activez la compression HTTP sur le serveur (IIS). Cela réduit la taille de la page envoyée au client, y compris ViewState.
  • Compressez le ViewState. Cela présente un avantage supplémentaire par rapport à la compression HTTP: il réduit également la taille de PostBacks (données renvoyées au serveur), puisque ViewState est toujours renvoyé au serveur pendant un PostBack. Il existe différentes approches pour cela, par ex. comme indiqué dans this blog post.
  • Stockez ViewState sur le serveur au lieu de l'envoyer dans un champ masqué avec la page. La façon la plus simple de le faire est d'utiliser le SesionPageStatePersister, mais il existe d'autres solutions qui stockent ViewState sur le disque au lieu d'utiliser la session (see here for example).
+0

Bonnes idées à essayer !!! – Lijo

+0

bonne réponse! merci! Mais même si stocker côté serveur viewstate ou en le compressant pourrait être de bonnes méthodes, à mon avis le moyen le plus simple de réduire sa taille sera encore de désactiver les contrôles qui ne nécessitent pas l'état viewState – Shide

1

Vous ne pouvez pas réduire la taille de ViewState. C'est ASP.NET qui sérialise/désérialise. Bien que vous puissiez sélectivement désactiver ViewState pour les contrôles qui n'en ont pas besoin.

+0

Vous pouvez le compresser et l'enregistrer dans votre propre champ de formulaire –

0

Vous pouvez activer la compression sur le serveur pour réduire au minimum la taille des données transférées via le réseau ou enregistrer viewState sur le disque et ne jamais l'envoyer au client.

4

La plupart des points sont mis en évidence dans les autres réponses. En voici un qui peut être utile:

Réduisez le nombre de contrôles serveur (par exemple, contrôles Web/html), en particulier ceux dont vous n'avez pas besoin. Utilisez des annotations HTML simples à la place.

J'ai vu trop de cas de contrôles Web Table/Row/Cell redondants où < table normale>, < tr> et < td> fera.

1

J'ai choisi d'enregistrer l'état d'affichage sur le serveur dans une base de données elle-même et de ne pas permettre qu'il soit transmis dans le code HTML au client, ce qui gonfle la taille de la page. Vous pouvez étendre le HiddenFieldPageStatePersister et contourner cela. J'ai écrit un article détaillé autour si vous le souhaitez ...

http://ashishnangla.com/2011/07/21/reducing-size-of-viewstate-in-asp-net-webforms-by-writing-a-custom-viewstate-provider-pagestatepersister-part-12/

+0

lien mort lien mort – Ash

0
protected override PageStatePersister PageStatePersister 
    { 
     get 
     { 
      return new SessionPageStatePersister(this); 
     } 
    } 

ajouter le code ci-dessus dans le code sous-jacent de la page qui génère de grandes valeurs de viewstate. Cela permet de stocker le viewstate dans la session. Seule une clé pour viewstate devrait être ajoutée maintenant.

Questions connexes