Comment puis-je mettre en œuvre le modèle Post / Redirect / Get dans WebForms asp.net?

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

  •  06-09-2019
  •  | 
  •  

Question

Je comprends donc les bases du modèle prg. Mais je ne suis pas venu à travers une technique pour rendre les données arbitraires disponibles à l'instance « get » d'une page.

Par exemple, je pourrais vouloir afficher différents messages de rétroaction à l'utilisateur en fonction de leur action qui a initié la publication.

Ce que je fais est l'envoi d'un identifiant comme paramètre de chaîne de requête. Cela fonctionne bien, mais il présente des problèmes de bookmarking et ne semble pas que ce serait l'échelle très bien. Et si je devais envoyer tous les ViewState?

Malheureusement, je suis attaché à WebForms au moment et n'ont pas été en mesure de convaincre mon organisation de migrer vers mvc.

Était-ce utile?

La solution

Si les champs POSTée sont persistaient avant la Redirect et vous avez besoin d'accéder à ces données après la Redirect, j'ajouter encore identifiant pour l'enregistrement de données (s) sur la chaîne de requête que vous mentionnez. Vous pouvez également spécifier un état de la requête (pour l'affichage des messages, etc.). Ensuite, sur la page GET, vous pouvez lire les données et faire tout avec elle.

Je ne vois pas d'autre moyen de contourner ce que chaque page obtenue par GET ne sera pas avoir accès à de ViewState etc la page précédente.

En utilisant Server.Transfer aura le même effet que la manipulation du POST sur la page originale.

Vous pouvez utiliser des variables de session pour stocker les données POST, mais qui pue.

Autres conseils

Je pense que vous pouvez toujours utiliser la méthode get dans l'élément de forme. Dans ce cas, vous ne serez pas en mesure d'utiliser l'ID de votre contrôle de manière normale. Mais vous pouvez utiliser la collection Request.Params pour obtenir le viewstate.

Mise à jour: Désolé, je viens d'essayer à nouveau. et constaté que vous pouvez accéder à votre contrôle serveur par son ID dans behind. comme:

Response.Write(text1.Text)

voir l'exemple:

la page aspx (uniquement l'élément de forme):

< form id="form1" runat="server" method="get">
< div>
< asp:TextBox ID="text1" runat="server" />
< asp:Button ID="button1" runat="server" OnClick="buttonClick" />
< div>
< form>

Remarque: J'ai utilisé un espace avant chaque « < » sinon le code ci-dessus ne sera pas visible.

le code behind (seul événement click bouton):

protected void buttonClick(object sender, EventArgs e)
    {
        string text = Request.Params["text1"];

        Response.Write(text);
    }

lorsque vous cliquez sur le bouton l'URL ressemblera à ceci:

http: // localhost: 1157 / WebSite1 / Default.aspx __ = VIEWSTATE% 2FwEPDwUKMTkwNjc4NTIwMWRkoJEtEHZ8lHQ53QllSkz8ncpEw80% 3D & __ = EVENTVALIDATION% 2FwEWAwKf% 2BPPUCwKTjKGwCgKs34rGBvus9oxN% 2FQkHlkzpKUEwrbxHLM6u & text1 = Ashish & button1 =

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