2012-10-07 1 views
4

J'essaie d'envoyer des données de formulaire d'une page à une autre en utilisant C# ASP.Net. J'ai deux pages default.aspx et default2.aspx.Here est le code que j'ai en default.aspx:Envoyer des données d'une page à une autre

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
<br /> 
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
<br /> 
<asp:Button ID="Button1" runat="server" Text="Go" 
    PostBackUrl="~/Default2.aspx" /> 
<br /> 

D'après ce que je sais à ce jour le PostBackUrl est utilisé pour définir la page dans laquelle vous souhaitez que les données être envoyé est-ce correct?

Comment puis-je récupérer les données envoyées à Default2.aspx?

Répondre

18

Vous avez quelques options, pensez

  1. état de session
  2. chaîne de requête

état de session

Si vous allez envoyer données entre les pages, vous pouvez envisager l'utilisation de Session State.

ASP.NET session state enables you to store and retrieve values for a user as the user navigates ASP.NET pages in a Web application. HTTP is a stateless protocol. This means that a Web server treats each HTTP request for a page as an independent request. The server retains no knowledge of variable values that were used during previous requests. ASP.NET session state identifies requests from the same browser during a limited time window as a session, and provides a way to persist variable values for the duration of that session. By default, ASP.NET session state is enabled for all ASP.NET applications.

Le meilleur de tous, c'est facile!

données mises en (par exemple sur Default1.aspx)

Session["FirstName"] = FirstNameTextBox.Text; 
Session["LastName"] = LastNameTextBox.Text; 

Get it out (par exemple sur Default2.aspx)

string firstname = Session["FirstName"] // value of FirstNameTextBox.Text; 
string lastname = Session["LastName"] // value of LastNameTextBox.Text; 

de chaîne de requête

Si vous Si vous envoyez de petites quantités de données (par exemple id = 4), il peut être plus pratique d'utiliser des variables de chaîne de requête.

Vous devez explorer l'utilisation des variables de chaîne de requête, par ex.

http://www.domain.com?param1=data1&param2=data2 

Vous pouvez alors obtenir les données sur comme

string param1 = Request.QueryString["param1"]; // value will be data1 
string param2 = Request.QueryString["param2"]; // value will be data2 

Vous pouvez utiliser quelque chose comme How do you test your Request.QueryString[] variables? pour obtenir les données.

Si vous n'êtes pas familier avec les variables querystring Vérifions their wikipedia article

3

Essayez ceci dans le Page_Load de Default2.aspx.

if (PreviousPage != null) 
     { 
      if (((TextBox)PreviousPage.FindControl("TextBox1")) != null) 
      { 
       string txtBox1 = ((TextBox)PreviousPage.FindControl("TextBox1")).Text; 
       Response.Write(txtBox1); 
      } 
     } 

Et oui vous avez raison, les données de la page 1 seront envoyés à la page 2 si vous utilisez l'attribut PostBackUrl.

MSDN link

+1

Je suppose qu'il aurait besoin d'utiliser Server.Transfer –

+0

@IssaQandil pourquoi aurait-il besoin de cela? Je viens de l'essayer moi-même et ça marche bien. – Thousand

+0

Lorsque vous utilisez la méthode de transfert ou que vous utilisez la publication entre pages pour transférer le traitement d'une page ASP.NET à une autre, la page d'origine contient des informations de demande qui peuvent être requises pour la page de destination. Vous pouvez utiliser la propriété PreviousPage pour accéder à ces informations. Tiré de ce lien http://msdn.microsoft.com/en-us/library/system.web.ui.page.previouspage.aspx –

7

variables de session peuvent être utiles dans ce contexte.

Par exemple, supposons que vos zones de texte contiennent des identifiants de connexion, puis enregistrez-les dans des sessions afin de pouvoir les utiliser plus tard dans n'importe quelle autre page. Comme ceci:

Dans Button_Click-

Session["name"]=TextBox1.Text; 
Session["pwd"]= TextBox2.Text; 

Au lieu de PostBackUrl="~/Default2.aspx" vous pouvez écrire le suivantes-

//in button click 
Server.Transfer("~/Default2.aspx"); 

Dans Default2.aspx chargement de la page:

string a= Session["name"].ToString(); 
string b= Session["pwd"].ToString(); 
2

Alors que tous les répond ici va fonctionner s Certains ne sont pas les plus efficaces. Pourquoi un simple/standard http POST doit-il appeler (cher) côté serveur Session?

Votre code ne fait rien de spécial - il est simplement POSTing un formulaire à une autre page. Tout ce que vous devez faire pour obtenir les données POSTed est de passer par la collection Request.Form. Avant la disponibilité pour définir le PostBackUrl (si la mémoire sert la version 1 de asp.net), Server.Transfer et obtenir des références à la page précédente était comment POSTing inter-pages a été fait/documenté. Cependant, avec PostBackUrl, les choses retournent aux bases, comme cela devrait être - une norme http POST d'une ressource à l'autre.

Voici un similar SO thread qui peut-être utile.

+0

Exactement en utilisant PostBackUrl vous devez revenir à l'essentiel –

+0

@IssaQandil Yup, ASP.net ne présente rien de "spécial" sur le web (mais il fait des merveilles pour les développeurs). À la base, cela fonctionne selon les principes de base de 'http'. Un 'Postback' n'est rien de plus qu'un' http POST' sur la même page. L'utilisation de 'PostBackUrl' change simplement la cible de' http POST' en une autre ressource sur le web (qui peut analyser/traiter les données POSTed), ASP.Net ou non, même site ou non. – EdSF

+0

C'est ce que j'essayais de lui dire dans sa question précédente qui parlait du même sujet, j'espère qu'il lirait votre clarification. –

Questions connexes