Comment puis-je conserver la valeur d'une étiquette dans un fichier response.redirect?

StackOverflow https://stackoverflow.com/questions/103765

  •  01-07-2019
  •  | 
  •  

Question

Voici la situation: j'ai le texte d'une étiquette, immédiatement suivi d'un appel answer.redirect () comme suit (il ne s'agit que d'un exemple, mais je crois qu'il décrit correctement ma situation):

aspx:

<asp:Label runat="server" Text="default text" />

Code-behind (code appelé lors d'un événement onclick):

Label.Text = "foo";
Response.Redirect("Default.aspx");   

Lorsque la page s'affiche, l'étiquette indique "texte par défaut". Que dois-je faire différemment? D'après ce que j'avais compris, de tels changements se feraient automatiquement dans les coulisses, mais apparemment, pas dans ce cas. Merci.

Pour un peu d’arrière-plan supplémentaire, l’extrait code-behind est appelé dans une méthode appelée lors d’un événement onclick. Il y a plus que cela, mais je n'ai inclus que ce qui présente un intérêt pour cette question.

Était-ce utile?

La solution

Après une redirection, vous perdrez toute information d'état associée à vos contrôles. Si vous souhaitez simplement que la page soit actualisée, supprimez la redirection. Une fois l'exécution du code terminée, la page s'actualise et tous les états sont conservés.

En coulisse, cela fonctionne car ASP.NET écrit les informations d'état dans un champ de saisie masqué de la page. Lorsque vous cliquez sur un bouton, le formulaire est publié et ASP.NET déchiffre l'état viewstate. Votre code s'exécute en modifiant l'état. Après cela, l'état est à nouveau écrit dans le champ masqué et le cycle se poursuit, jusqu'à ce que vous changiez la page sans POST . Cela peut se produire lorsque vous cliquez sur un lien hypertexte vers une autre page ou via Response.Redirect (), qui indique au navigateur de suivre l'URL spécifiée.

Autres conseils

Un appel Response.Redirect demandera au navigateur de l'utilisateur de charger la page spécifiée dans l'URL que vous lui avez indiquée. Comme il s'agit d'une nouvelle demande pour votre page, celle-ci utilise le texte contenu dans votre balisage (car je suppose que le texte de l'étiquette est défini dans un gestionnaire de boutons ou similaire).

Si vous supprimez l'appel Response.Redirect , votre page devrait fonctionner comme annoncé.

ASP et ASP.Net sont intrinsèquement sans état, à moins que l'état ne soit explicitement spécifié. Les informations entre PostBacks, telles que la valeur d'une étiquette, sont normalement contenues dans l'état de visualisation, mais si vous modifiez des pages, l'état de visualisation est perdu car il était en cours de stockage dans un champ masqué de la page.

Si vous souhaitez conserver la valeur de l'étiquette entre les appels, vous devez utiliser l'un des mécanismes d'état (par exemple, Session, Préférences) ou des systèmes de communication (Requête (GET, POST)).

De plus, vous pouvez rechercher Server.Transfer, qui modifiera le traitement de la page en coulisse. Response.Redirect est conçu pour abandonner votre contexte actuel dans la plupart des cas.

Pour conserver cet état, utilisez Server.Transfer au lieu de Response.Redirect.

Donc, si je peux répondre à ma propre question (selon la FAQ, c'est encourageant), la réponse courte est que vous ne persistez pas dans l'état d'affichage par le biais de redirections. L'état d'affichage est destiné aux publications, pas aux redirections.

Bonus: Tout ce que vous avez toujours voulu savoir sur View State dans ASP .NET , avec des images!

Pour ce que ça vaut (et j'espère que ça vaut quelque chose), chapitre 6 de Pro ASP .NET 3.5 en C # 2008, Deuxième édition est une excellente ressource sur le sujet. Tout le livre a été formidable jusqu'à présent.

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