2012-10-07 127 views
4

我想從一個頁面發送到另一個使用C#ASP.Net表單數據。我有兩頁的Default.aspx和default2.aspx.Here是我Default.aspx中的代碼:發送數據從一個頁面到另一個

<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 /> 

據我所知,到目前爲止使用了一項PostBackUrl設置要在其中的數據頁被髮送這是正確的?

另外我怎樣才能檢索發送到Default2.aspx的數據?

回答

18

您有幾種選擇,可以考慮

  1. 會話狀態
  2. 查詢字符串

會話狀態

如果你要送頁面之間的數據,你可以考慮使用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.

最棒的是,它很容易!在(例如在default1.aspx)

將數據

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

把它弄出來(例如在default2.aspx)

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

查詢字符串

如果您正在發送少量數據(例如id = 4),使用查詢字符串變量可能更實用。

您應該探索使用查詢字符串變量,例如

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

然後,您可以獲取數據出像

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

您可以使用類似How do you test your Request.QueryString[] variables?獲取數據了。

如果你不熟悉的查詢字符串變量退房their wikipedia article

3

在Default2.aspx的Page_Load中試試這個。

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

是的,你是正確的,如果使用PostBackUrl屬性從第1頁中的數據將被髮送到第2頁。

MSDN link

+1

我想他需要使用Server.Transfer –

+0

@IssaQandil他爲什麼需要它?我只是自己試了一下,它工作正常。 – Thousand

+0

當您使用Transfer方法或使用跨頁面發佈將處理從一個ASP.NET頁面轉移到另一個頁面時,原始頁面包含目標頁面可能需要的請求信息。您可以使用PreviousPage屬性來訪問該信息。採取從這個鏈接http://msdn.microsoft.com/en-us/library/system.web.ui.page.previouspage.aspx –

7

Session變量可以在這方面非常有用。

敵人示例假設您的文本框包含登錄憑據,然後將它們保存在會話中,以便稍後可以在任何其他頁面中使用它們。就像這樣:

在Button_Click-

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

而不是PostBackUrl="~/Default2.aspx"你可以寫以下各項

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

在Default2.aspx頁面加載:

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

雖然所有的這裏的答案將工作 s ome不是最高效的。爲什麼簡單/標準http POST不得不調用(昂貴的)服務器端Session

您的代碼沒有做任何特別的事情 - 它只是將表單發佈到另一個頁面。您只需要通過Request.Form集合來獲取已發佈的數據。

在可用性設置PostBackUrl(如果內存服務於asp.net的第1版)之前,Server.Transfer以及獲得前一頁的引用是如何完成/記錄跨頁面POST。然而,與PostBackUrl一樣,事情迴歸到基本原理,它應該是這樣 - 從一個資源到另一個資源的標準http POST

這是similar SO thread,這可能有幫助。

+0

確實如此,通過使用PostBackUrl您需要回到基礎 –

+0

@IssaQandil是的,ASP.net不會向網絡引入任何「特殊」(但它對開發人員來說確實是個奇蹟)。它的核心是遵循'http'的基本原則。 'Postback'只不過是一個'http POST'到同一頁面。使用'PostBackUrl'只是將'http POST'的目標更改爲網絡上的某個其他資源(可以解析/處理POST數據),ASP.Net或不是,是否爲同一站點。 – EdSF

+0

這就是我在上一個問題中試圖告訴他的那個討論同一主題的問題,希望他能閱讀你的說明。 –

相關問題