2009-10-10 8 views
0

Si j'ai une zone de texte txtInfo dans un formulaire que je soumets par courrier, si je poste sur la page, je peux lire la valeur entrée dans la zone de texte en utilisant txtInfo.Text. Que faire si je poste sur une autre page? Est-ce que je dois analyser Request.Form pour les mutilations de nom de contrôle (ce que je fais maintenant) ou puis-je l'obtenir à partir de ce désordre.C# comment récupérer les données

Merci


Merci pour les réponses à ce jour ... Désolé, j'aurais été un peu plus clair. Ce contrôle est un contrôle runat="server". C'est ce que je suis relégué à présent - pas très joli.

foreach (String key in page.Request.Form.AllKeys) 
    { 
     String[] controlName = key.Split('$');//remove that horrrible .net naming - thanks Bill. 
     keyName = controlName[controlName.Length - 1];//get the last value so we always have the name 
     keyValue = page.Request.Form[key]; 
     if (keyValue != "") 
     { 
      switch (keyName)... 

Répondre

4

Vous devriez regarder dans Cross Page Postbacks.

Comme il est indiqué sur cette page, vous pouvez facilement accéder à txtInfo en utilisant:

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

Cela ressemble à une solution plus stable que la mienne. Je vais essayer et voter en conséquence. Comment est la performance sur .Findcontrol? Existe-t-il un moyen de référencer directement le contrôle - par exemple Page.PreviousPage.txtInfo? – Praesagus

+0

Cela fait longtemps que je n'ai pas fait ASP.NET mais IIRC vous permet de diffuser votre Page.PreviousPage en tant que classe de formulaire Web. Dans votre classe de formulaire Web, vous pouvez exposer la valeur TxtInfo.Text ou le contrôle TextBox tous ensemble. Tout ce que vous avez à faire est quelque chose comme (Page.PreviousPage comme MyInfoWebForm) .MyTxtInfoTextBox.Text pour accéder à la valeur. Je recommanderais seulement d'exposer la valeur de texte si possible. Si cela n'est pas clair, faites le moi savoir. –

+0

Après avoir regardé votre exemple, si vous ne faites pas de publication croisée, tout ce que vous avez à faire est Request.Form ["txtInfo"] comme mentionné par d'autres. De plus, si le est défini dans votre page, tout ce que vous avez à faire derrière le code est d'accéder à la valeur comme txtInfo.Text. Vous n'auriez pas besoin de faire une Request.Form ["txtInfo"] ... –

3

Quel est le problème avec ...

string txtInfo = Request.Form["txtInfo"]; 
if(txtInfo == null) txtInfo = ""; 
+0

Je pense qu'il poste sur une page différente par rapport à un post régulier. Peut-être que j'ai mal lu? –

+0

Un nom compliqué , généré par asp: TextField, est ce qui ne va pas – orip

+0

Ah je gotcha - w/tous les trucs de conteneur de nommage. Je vois le prob maintenant. Coo - merci pour votre réponse :) –

0

Une solution simple serait d'utiliser un <input type="text"> simple, à la place d'un <asp:TextBox>. Donnez-lui un attribut name, puis accédez-y par Request.Form.

fichier .aspx:

<input type="text" name="foo" /> 

Publié à code-behind (même page, page différente, n'a pas d'importance):

var text = Request.Form["foo"]; 
Questions connexes