2010-05-13 3 views
1

Je sais que cela doit être la question la plus simple jamais posée sur ASP.Net, mais je suis déconcerté. J'ai un formulaire dans lequel mon visiteur entrera le nom, l'adresse, etc. Ensuite, je poste ce formulaire via la propriété PostBackUrl de mon bouton Envoyer vers une autre page, où les champs sont censés être tous reformatés en nouveaux champs cachés, puis POSTé de nouveau à Paypal.Comment puis-je récupérer les valeurs des contrôles dans le formulaire affiché?

Mon problème est que je n'arrive pas à obtenir les valeurs saisies par le visiteur dans la page d'origine. Chaque fois que je mets "runat = 'server'", ASP.Net change complètement l'ID du contrôle, ce qui rend impossible l'accès. Dans la forme POSTed j'ai essayé Request.Form["_txtFirstName"] et cela s'est avéré nul. Puis j'ai essayé ((TextBox)PreviousPage.FindControl("_txtFirstName")).Text et c'était nul, aussi. J'ai essayé des variantes sur ceux-ci. Je ne peux pas comprendre comment je suis censé obtenir ces contrôles. Pourquoi ce genre de choses doit-il être si difficile?

Répondre

0

Utilisez-vous MasterPages? Si oui, vous devez rechercher le contrôle dans l'espace réservé contenu:

ContentPlaceHolder placeholder = (ContentPlaceHolder)Page.PreviousPage.Master.FindControl("ContentPlaceHolder1"); 

TextBox previousPageTextBox = (TextBox)placeholder.FindControl("TextBox1"); 
+0

C'est aussi un très bon point –

+0

Wow, c'était effectivement le problème. Quel cauchemard. Merci patmortech! –

0

Quel est le nom du contrôle TextBox sur la première page? N'utilisez pas le clientId, utilisez l'ID déclaré comme lors de l'appel de FindControl, donc s'il s'appelle ID = "TextBox1", utilisez le code ci-dessous pour le trouver.

Votre seconde approche semble correcte, sauf que vous avez manqué la Page.PreviousPage. Cela ne devrait cependant pas affecter le résultat. Avez-vous activé le suivi?

Ceci est la syntaxe standard des documents, placés dans votre page cible ...

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

Aussi, voir la réponse de patmortech sur les pages maître –

+0

Eh bien l'ID de commande est _txtFirstName sur le côté serveur. Cependant quand je suis sur la page suivante, faire Request.Form ("_ txtFirstName") produit un résultat nul. Un coup d'œil sur le tableau de contrôles dans ce document révèle que mon contrôle est maintenant ctl00 $ _contentPlaceHolder1 $ _txtFirstName, ce qui est méconnaissable, évidemment. J'ai pensé qu'en utilisant un POST, avoir Request.Form() disponible résoudrait mon problème (avant que j'aie fait un Response.Redirect et il n'y avait aucun contenu de Request.Form). Je ne m'attendais pas à voir tous les ID changé. PreviousPage finit par fonctionner (voir ci-dessous réponse) mais qu'est-ce qu'on fait avant 2.0? –

0

Dans ASP.NET si le contrôle est un contrôle côté serveur, vous appelez simplement par l'ID donné à lui lors du codage, pas le rendu.

Markup:

<input type="text" id="myId" runat="server" /> 

code derrière:

string controlValue = myId.Value; 
Questions connexes