2010-07-06 90 views
1

我有一個用戶註冊表單。在這裏,我已鏈接到另一個頁面(卡片信息頁面),該頁面必須填寫以進行註冊。用戶填寫用戶註冊表單中的少數幾個字段,然後單擊用於註冊信息頁面的鏈接。當用戶點擊卡片信息頁面中的鏈接導航回註冊頁面時,註冊時輸入的以前的詳細信息就消失了。所以我需要從卡信息頁面重定向到註冊頁面而無需回傳。我怎麼能做到這一點?重定向無回發

Response.Redirect()用於重定向。

回答

0

Server.Transfer()將執行到服務器端的另一個頁面的傳輸。

更新:將有可能填充當前頁面與最初被查詢字符串傳遞的狀態Context.Items財產。這與會話狀態類似,但僅限於當前請求。

更新2:Server.Transfer()方法接受一個布爾值參數preserveForm過載,這樣可以保留查詢字符串參數:

http://msdn.microsoft.com/en-us/library/aa332847(v=VS.71).aspx

+0

Server.Transfer不會在這方面工作,因爲用戶使用需要查詢字符串參數的信息卡 – 2010-07-06 10:21:22

+0

沒關係,稍微進一步閱讀似乎表明它可以保留查詢字符串(如果您需要)。 – 2010-07-06 10:48:27

4

你不能沒有回傳我不這樣做認爲。我建議將會話狀態中註冊頁面的詳細信息存儲起來,如果用戶返回該頁面,請從會話狀態重新填充字段。

//eg in registration page 
protected void CardInfoLink_Click(object sender, EventArgs e) 
{ 
    //store details entered 
    Session["Registered"] = true; 
    Session["Username"] = txtUserName.Text; 
    //etc for any other fields 
    Response.Redirect("~/CardDetailsPage.aspx"); 
} 

然後在Page_Load方法中,如果會話數據存在,則從會話中預先填充表單。 e.g

if (!Page.IsPostback && (bool)Session["Registered"]) 
{ 
    txtUserName.Text = (string)Session["Username"]; 
    //repopulate other fields as necessary 
} 
+0

是的,我知道會議可以使用,但我想有沒有其他方式!我有更多的字段(30)在用戶註冊頁面 – 2010-07-06 10:38:41

+0

我仍然認爲除了存儲表單信息服務器端,無論是在會話或數據庫中,還是將它們存儲在Cookie中(我認爲仍然需要服務器端代碼)。爲了使事情變得更容易,你可以創建一個簡單的具有get/set屬性的類來表示所有表單字段,然後將該類的一個實例存儲在會話狀態中,這樣會更易於管理。讓我知道你是否想要一個我的意思的例子。 – 2010-07-06 11:41:57

+0

謝謝..!查看答案後也是一樣:) – 2010-07-06 11:56:45

1

當您重定向到另一個頁面,除非你做些什麼來阻止它,它就會失去第一頁的所有內容。可以想到的選項有:

  1. 在彈出窗口中創建卡片信息頁面。這將意味着您的主窗口在後臺保持不變。你最好使用純粹的客戶端代碼來做到這一點,但如果你需要服務器端代碼來做到這一點,它仍然是可能的,只是稍微費力一些。

  2. 保存重定向前發送的信息。這可能只是在會話或數據庫中,或者如果你願意,你甚至可以在客戶端使用cookie。然後,當您重新訪問該頁面時,您可以檢查是否保存了信息並自動加載。

1

如果您將用戶重定向到另一個頁面,該屏幕上的所有捕獲信息將會丟失。視圖狀態不保留在重定向上,但僅保留在重定向上,但僅限於回發/回調

跨重定向維護信息的唯一方法是使用會話變量,Cookie,甚至將數據保存到數據庫/ XML文件並在返回到該頁面時重新填充。

我建議你保存你的信息,因爲用戶被定向到信息卡,然後在返回時檢查值並重新填充它。

0

您可以將值存儲在ViewState/Session並重定向到另一個頁面(卡信息頁面),然後在返回到註冊頁面時重新填充值。或者在同一頁面上顯示pop-upspanels(使用Visible屬性顯示/隱藏),您可以保留用戶輸入。 (如果您使用的是服務器端控件,則值不會被清除)。

0

您可以使用任何種類的「轉到下一頁」按鈕點擊ajax請求將註冊數據複製到會話中。然後在返回後,您可以再次填充數據並刪除會話。你的代碼應該類似於這個:

---------------- jquery ajax request ------------------ -----

function SetValuesIntoSession(value1, value2, value3) {   
     $.ajax(
     { 
      type: "POST", 
      url: WebServicePathAndName.asmx/InsertIntoSessionMethodName", 
      contentType: "application/json; charset=utf-8", 
      data: "{value1:'" + value1 + "', value2:'" + value2 + "', value3:'" + value3 + "'}", 
      dataType: "json", 
      success: function(response) { 
       if (response.d == "Yes") { 
        //do something in correct response 
       } 
       if (response.d == "No") { 
        //do something for incorrect response 
       } 
      }, 
      error: function(xhr) { 
       alert('Error! Status = ' + xhr.status); 
      } 
     });  
} 

下面是Web服務的代碼,應該將數據插入到會話中。請注意,如果您要在Web服務中使用會話狀態,則必須設置「EnableSession = true」

--------------------- WebServicePathAndName.asmx ------------------

[WebMethod(EnableSession = true)] 
public void InsertIntoSessionMethodName(string value1, string value2, string value3) 
{ 

    Session[ "value1" ] = value1; 
    Session[ "value2" ] = value2; 
    Session[ "value2" ] = value3; 
} 

我覺得,其餘的代碼應該很容易實現。