Question

Venant d'un contexte PHP, j'adore utiliser des URL propres pour récupérer les données d'un service à un autre.

Cependant, sur certains de mes projets ASP.NET, le paramètre ViewState est horrible dans mes URL.

Existe-t-il un moyen de désactiver cette fonctionnalité au niveau mondial?

Quel en sera l'impact sur mon application ASP.NET?

Était-ce utile?

La solution

Vous pouvez désactiver Viewstate pour l'ensemble du site, comme suit:

    <system.web>
<pages enableViewState="false" />

Cela dit, vous ne devriez pas l'obtenir sur l'URL. ViewState est un champ caché envoyé au serveur avec une publication (qui utilise normalement post). Il conserve l'état des contrôles lorsque la page a été rendue au client, en l'envoyant à chaque publication. Si cela fonctionne pour l'application, vous pouvez utiliser plutôt post (le formulaire du problème utilise sûrement get), sinon jetez un coup d'œil à la réponse de Jon.

Vérifiez ce lien pour plus d'informations sur la manière dont l'état viewstate s'inscrit dans le cycle de vie d'asp.net: http://msdn.microsoft.com/en-us/library/ms972976.aspx .

Autres conseils

J'avais une question similaire lors de l'écriture le suivi de la réputation .

Je ne sais pas comment vous le faites globalement si vous n'utilisez jamais un formulaire avec runat="server" ensemble, ce qui est davantage lié à la discipline qu'à un paramètre. En particulier, si vous avez <=> défini sur un formulaire, je pense que vous obtiendrez toujours un paramètre viewstate, même si vous l'avez désactivé partout afin que vous n'obteniez aucune valeur . C'était mon expérience, de toute façon.

Évidemment, cela vous limite quelque peu, mais j'ai constaté que l'utilisation des contrôles serveur HTML (au lieu des contrôles ASP.NET) pour les parties appropriées d'ASP.NET peut rendre la vie beaucoup plus simple à comprendre.

Désactivez ViewState par défaut en utilisant un élément <page> dans le fichier web.config. L'utilisation de EnableViewState="true" dans la directive @Page ne fonctionnera plus une fois que vous désactivez ViewState dans le fichier web.config. Si vous décidez plus tard que vous avez besoin de ViewState pour une page spécifique, vous pouvez le réactiver pour cette page uniquement à l'aide d'un <location> élément.

<configuration>
  <system.web>
    <pages enableViewState="false" />
  </system.web>

  <location path="MyFolder/MyPage.aspx">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
  <location path="Site.master">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
</configuration>

Vous devez faire de même pour toutes les pages maîtres utilisées par votre page compatible ViewState.

Ajoutez ceci au fichier web.config:

<Pages enableViewState="false"/> 

Vous pouvez passer à ASP.Net MVC. D'après ce que j'ai compris, le ViewState n'est pas utilisé.

Rappelez-vous toutefois que certains comportements attendus par la plupart des développeurs de formulaires Web ASP.NET ne fonctionneront pas sans ViewState. ViewState a pour but de donner l’illusion que diverses propriétés de page et de contrôle persistent d’une requête à l’autre. ViewState ne contient pas toutes les propriétés du contrôle, mais seulement celles qui ont changé. L'idée est que ViewState conserve ces propriétés telles qu'elles étaient au moment du dernier rendu du formulaire.

Un bon exemple est un événement SelectedIndexChanged dans une liste déroulante (pour lequel aucun autopostback n'est défini). Cela fonctionne car ViewState conserve l'index précédent, le formulaire enregistre l'index actuel et le contrôle compare les deux afin de savoir que l'index sélectionné a été modifié. C'est à ce moment-là qu'il déclenche l'événement TextChanged. Sans ViewState, cet événement ne se déclenchera pas. Idem pour les <=> événements, etc.

En l'absence de la situation GET (que je n'ai jamais rencontrée), le gros problème avec ViewState est de l'utiliser là où ce n'est pas nécessaire. Votre contrôle de grille n'a pas besoin de conserver les valeurs précédentes de tous les contrôles dans toutes ses lignes. N'activez donc pas ViewState dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top