2008-10-08 7 views
3

J'ai une valeur de chaîne de texte que je voudrais conserver d'une page Web à l'autre sans utiliser les chaînes de requête ou les états de session/vue. J'ai essayé d'obtenir le contrôle ASP http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hiddenfield.aspx">HiddenField pour passer des informations d'un formulaire Web à un autre forme.

Tous les exemples de contrôle HiddenField que je l'ai vu est de préserver les allers-retours du client vers le serveur pour la même forme.

y at-il moyen d'un formulaire pour accéder aux commandes ASP (et leur valeurs) à partir du formulaire précédemment rendu? Ou la forme initiale est-elle simplement disposée en mémoire au moment où la deuxième forme exécute sa méthode OnLoad?Si une page exécute un Response.Redirect() sur une autre page Web, la nouvelle page peut-elle accéder aux valeurs des contrôles asp.net depuis la page d'origine?

Répondre

0

Je suppose que le Response.Redirect() envoie un Loc ation: En-tête HTTP pour faire une redirection.

Comme HTTP est sans état, je suppose également que ces variables sont inaccessibles.

Il existe cependant des solutions.

  1. Imprimer un formulaire avec des champs cachés, et utiliser le javascript pour soumettre
  2. Redirect dans le code interne (charger la chose dont il a besoin pour obtenir manuellement)
  3. stocker les données dans une table de base de données temporaire quelque part, et transmettre un ID unique

Cependant, d'après mon expérience, je ne comprends pas pourquoi vous pourriez avoir besoin de faire cela (autre que de re-soumettre un formulaire après une authentification de l'utilisateur - qui, espérons-le, devrait être capable d'utiliser la méthode 2 pour

0

Rappelez-vous, une Response.Redirect demande au navigateur d'émettre une autre requête au serveur. En ce qui concerne le serveur, cette requête suivante est impossible à distinguer de toute autre demande entrante. Ce n'est certainement pas lié à un formulaire précédent. Pourriez-vous expliquer votre aversion au stockage dans la session, afin que nous puissions proposer des alternatives viables?

2

Si les deux pages vivent dans la même application que vous pouvez utiliser Server.Transfer:

firstpage.aspx:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Server.Transfer("~/secondpage.aspx"); 
} 

secondpage.aspx:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Page previousPage = (Page) HttpContext.Current.PreviousHandler; 
    Label previousPageControl = (Label) previousPage.FindControl("theLabel"); 
    label.Text =previousPageControl.Text; 
} 

Une solution un peu mieux serait implémenter une interface sur votre première page où vous exposer les propriétés pour les valeurs nécessaires à la deuxième page.

3

Vous ne pouvez pas obtenir les champs de la page précédente avec Response.Redirect. Vous pouvez avec cross page posting:

if (Page.PreviousPage != null) 
{ 
    TextBox SourceTextBox = 
     (TextBox)Page.PreviousPage.FindControl("TextBox1"); 
    if (SourceTextBox != null) 
    { 
     Label1.Text = SourceTextBox.Text; 
    } 
} 
+0

Vous pouvez également faire référence à la page précédente via la propriété Page.PreviousPage après l'utilisation de la méthode Server.Transfer(). –

+0

Avec cette méthode, vous supposez que vous savez avec certitude de quelle page vous venez – JohnIdol

4

réponse est non. Comme d'autres l'ont noté, vous pouvez utiliser Server.Transfer et ensuite vous pouvez - cependant, ceci doit être utilisé avec précaution. C'est une "redirection côté serveur" par exemple.

Votre utilisateur est sur http://mysite.com/Page1.aspx ils cliquent sur un bouton et vous effectuez un Server.Transfer ("Page2.aspx"). Page2.aspx sera rendu dans leur navigateur, mais l'URL sera toujours Page1.aspx, cela peut causer de la confusion et gâcher la navigation avant/arrière.

Personnellement, je n'utiliserais Server.Transfer qu'en dernier recours - dans le monde du Web, le partage de données entre les pages signifie généralement que vous devez utiliser un mécanisme de stockage; Cookie, QueryString, Session, Base de données - faites votre choix.

Questions connexes