2008-10-08 37 views
3

我有一個文本字符串值,我想從一個網頁持續到另一個,而不使用查詢字符串或會話/視圖狀態。我一直在試圖讓ASP http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hiddenfield.aspx">HiddenField控件將信息從一個web表單傳遞到不同形式。

所有我見過的hiddenField控件實例是保存在客戶端的往返行程服務器相同的形式。

有沒有辦法爲形式訪問ASP控件(及其值)從先前呈現的形式?或者是初始形式在第二個表單執行時簡單地處理內存 OnLoad方法?如果一個頁面執行一個Response.Redirect()到另一個網頁,新頁面可以從原始頁面訪問asp.net控件中的值嗎?

回答

0

我會假設Response.Redirect()發送一個Loc ation:HTTP頭做重定向。由於HTTP是無狀態的,所以我還假設這些變量是不可訪問的。

然而,有解決方案。

  1. 打印帶有隱藏域的表單,並使用JavaScript來提交
  2. 重定向代​​碼內部(加載它需要得到的東西手動)
  3. Store中的某些臨時數據庫表中的數據某處,並沿着一個唯一的ID通過

但是,從我的經驗,我不明白爲什麼你可能需要這樣做(除重新提交表單的用戶認證之後 - 這希望你應該能夠使用方法2用於

0

請記住,Response.Redirect指示瀏覽器向服務器發出另一個請求。就服務器而言,這個下一個請求與任何其他入站請求是無法區分的。這當然不會以任何方式連接到以前的表單。

您能解釋一下您對會話中存儲的反感嗎,所以我們可以提出一些可行的選擇嗎?

2

如果這兩個網頁住在同一個應用程序,您可以使用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; 
} 

一個稍微更好的解決辦法在您的第一頁上實現一個接口,在此處顯示第二頁所需值的屬性。

3

您無法使用Response.Redirect獲取上一頁的字段。 您可以用cross page posting

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

使用Server.Transfer()方法後,您也可以通過Page.PreviousPage屬性引用上一頁。 – 2008-10-08 07:36:44

4

快速答案是否定的。正如其他人已經注意到的,你可以使用Server.Transfer,然後你可以 - 但這是謹慎使用。這是一個「服務器端重定向」,例如。

你的用戶在http://mysite.com/Page1.aspx他們點擊一個按鈕,然後執行Server.Transfer(「Page2.aspx」)。 Page2.aspx將在瀏覽器中呈現,但URL仍然爲Page1.aspx,這可能會導致混淆並導致後退/前進導航。

就我個人而言,我只會使用Server.Transfer作爲最後的手段 - 在網絡世界中,跨頁面共享數據通常意味着您需要使用存儲機制; Cookie,QueryString,會話,數據庫 - 請選擇。

相關問題