3 votes

asp.net webforms - est-ce une bonne façon de persister l'état ?

Il s'agit d'une question sur asp.net WebForms et l'état de session. Je sais que c'est probablement un cas où MVC est meilleur, mais j'ai besoin d'utiliser WebForms.

Dans l'événement OnLoad de ma page, j'initialise un objet et ses propriétés (un appel à une base de données, puis une logique pour les propriétés). J'utilise cet objet pour remplir les contrôles de la page, par exemple lblTitle.text = myObj.Title.

Cette page comporte également une zone de saisie dans laquelle l'utilisateur doit entrer des informations, puis appuyer sur le bouton "Enregistrer". Cette opération appelle une fonction utilitaire qui écrit le contenu de la zone de texte dans un fichier et l'enregistre. De plus, elle doit l'enregistrer dans un fichier portant le nom contenu dans myObj.Title.

Voici mon problème - à cause de l'aspect sans état des WebForms, après le chargement de la page, monObj a disparu.* Ce qui signifie que je ne peux pas faire quelque chose de facile comme ceci lors de la sauvegarde : Util.save(contentsoftextbox, myObj.Title).

J'ai donc résolu le problème en écrivant la valeur de myObj.Title dans une variable de session (Session.Add["title"] = myObj.Title dans l'événement OnLoad de la page. Ensuite, lorsque la fonction de sauvegarde est appelée, j'utilise cette variable de session comme deuxième paramètre.

Merci d'avoir lu jusqu'ici.

Ma question est la suivante :

Cela ressemble à une façon inutilement complexe de faire le travail. Est-ce le cas ? Que pourrais-je faire d'autre pour accomplir cette tâche ?

*Droit ?

5voto

kd7 Points 16740

Avez-vous regardé ViewState ? Ce pourrait être une meilleure option si vous n'avez besoin d'accéder à l'objet que sur la page où vous vous trouvez, plutôt que de le garder en session ?

4voto

asgerhallas Points 5134

Dans la plupart des cas, je réinitialiserais myObj à nouveau lors du postback.

1voto

Klaus Byskov Pedersen Points 43779

Cela semble être une bonne façon de procéder dans l'ensemble. Je ne connais pas les détails de votre système, mais vous devriez peut-être envisager d'épargner MyObj en session au lieu du seul titre.

0voto

Nick Spiers Points 1659

Vous pouvez l'enregistrer dans le ViewState

0voto

mfeingold Points 5236

Mettez la même valeur dans un Input type=hidden. De cette façon, lors du retour du message, vous serez en mesure de la lire.

Placer de telles valeurs sur une session est une manière habituelle, mais il est préférable d'éviter cette voie pour de nombreuses raisons liées au maintien de l'état de la session sur le serveur plutôt que sur le navigateur, y compris, mais sans s'y limiter, la nécessité d'une affinité de session (cookies de session, sessions collantes, etc.).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X