Probablement une question débutant très élémentaire.Restauration de l'ancienne valeur d'une zone de texte (ou de tout autre contrôle)
Imaginez la situation suivante:
J'ai une page ASP.NET avec une zone de texte et un bouton. Dans la zone de texte, je vais dire un nom "Laurel" et cliquez sur le bouton. La zone de texte est liée comme un paramètre de contrôle à une source de données et cette source de données extrait le contenu "Laurel" de la zone de texte pour créer une requête, sélectionne toutes les commandes du client Laurel et les renvoie au navigateur où elles sont affichées dans une liste (gridview par exemple). La liste est longue et a deux pages (la liste a un contrôle de pager). La liste est sur la même page où se trouve également la zone de texte. Donc, je vois maintenant une page dans mon navigateur avec la zone de texte (contenant toujours le texte "Laurel") et une liste avec un pager.
que je pouvais faire maintenant deux actions:
- Entrez le nom de « Hardy » dans la zone de texte et cliquez sur le bouton: Le cycle passe au-dessus encore et les commandes de client Hardy sont affichés. C'est bien et ce que je veux.
- Cliquez sur le contrôle pager pour afficher la deuxième page des commandes de Laurel. Cela fonctionne parce que j'ai toujours "Laurel" dans la zone de texte. Ainsi, sur la publication déclenchée par le contrôle du téléavertisseur, la source de données peut à nouveau extraire "Laurel" comme paramètre de requête de la zone de texte, exécuter la requête et transmettre la deuxième page de commandes à mon navigateur. C'est bien aussi.
En fait, il pourrait y avoir une troisième action:
- J'entre le nom « Hardy » dans la zone de texte, puis changer mon esprit et décider que je veux voir la deuxième page de l'ordre de Laurel. J'ai donc "Hardy" dans la zone de texte mais ne cliquez pas sur le bouton soumettre mais je clique sur "page suivante" du contrôle pager pour voir la deuxième page. Sur le serveur, la source de données extrait le contenu "Hardy" de la zone de texte, lance une requête et tente ensuite de livrer la deuxième page de Hardy au lieu des commandes de Laurel. Donc ce n'est pas ce que je veux. (Peut-être que Hardy a seulement quelques ordres, pas assez pour deux pages.La source de données pourrait me dire alors "Rien trouvé" parce qu'il n'y a rien sur la deuxième page pour Hardy.)
(Ce que je veux dire peut aussi être vu ici sur stackoverflow: Entrez quelque chose dans la boîte de recherche, par exemple "ASP.NET" et appuyez sur la touche Entrée, vous obtiendrez une longue liste de résultats avec beaucoup de pages puis entrez un autre terme dans la boîte de recherche, par exemple "PHP "mais ne frappez pas entrer, cliquez sur la page 2 dans le contrôle pager en bas de la page.Une publication se produit (qui transmet également le nouveau contenu" PHP "de la boîte de recherche, je suppose), la deuxième page pour mot clé" ASP.NET "est affiché et la boîte de recherche ne contient plus" PHP "mais plutôt" ASP.NET ".)
La question est maintenant: Comment puis-je éviter une situation comme celle-ci? Mon idée de base est: je dois restaurer l'ancienne valeur "Laurel" dans la zone de texte pour fournir la valeur de paramètre correcte à la requête de source de données et mon ancienne valeur "Laurel" doit être stockée "quelque part" (sur serveur? sur client? si sur client, caché dans la page ou dans un cookie ou ...?). Existe-t-il des modèles standard pour répondre à cette exigence? Ou est-ce que je pense dans la mauvaise direction?
Merci d'avance!
Merci pour vos commentaires! Je viens de voir que stackoverflow semble utiliser QueryStrings pour stocker le terme de recherche. Je comprends la solution pour utiliser l'objet de session et un champ caché. Cependant, je ne suis pas sûr de savoir comment travailler avec l'objet ViewState. Jusqu'à présent, pour moi, c'était toujours un instrument utilisé en interne par ASP.NET pour la gestion d'état, rien n'était destiné à être utilisé par programmation. Je dois en savoir plus sur ViewState. L'utilisation de l'objet de session requiert que les cookies soient acceptés dans le navigateur client, est-ce correct? – Slauma
L'accès ViewState et Session est codé de manière identique - voir http://stackoverflow.com/questions/944484/syntax-to-access-variables-in-viewstate. Normalement, l'utilisation de la session nécessite un cookie, mais vous pouvez configurer des sessions sans cookie, où l'ID est transmis dans le cadre de l'URL. (http://stackoverflow.com/questions/2273066/what-are-cookieless-sessions) –