我有一個用戶註冊表單。在這裏,我已鏈接到另一個頁面(卡片信息頁面),該頁面必須填寫以進行註冊。用戶填寫用戶註冊表單中的少數幾個字段,然後單擊用於註冊信息頁面的鏈接。當用戶點擊卡片信息頁面中的鏈接導航回註冊頁面時,註冊時輸入的以前的詳細信息就消失了。所以我需要從卡信息頁面重定向到註冊頁面而無需回傳。我怎麼能做到這一點?重定向無回發
Response.Redirect()用於重定向。
我有一個用戶註冊表單。在這裏,我已鏈接到另一個頁面(卡片信息頁面),該頁面必須填寫以進行註冊。用戶填寫用戶註冊表單中的少數幾個字段,然後單擊用於註冊信息頁面的鏈接。當用戶點擊卡片信息頁面中的鏈接導航回註冊頁面時,註冊時輸入的以前的詳細信息就消失了。所以我需要從卡信息頁面重定向到註冊頁面而無需回傳。我怎麼能做到這一點?重定向無回發
Response.Redirect()用於重定向。
Server.Transfer()
將執行到服務器端的另一個頁面的傳輸。
更新:將有可能填充當前頁面與最初被查詢字符串傳遞的狀態Context.Items
財產。這與會話狀態類似,但僅限於當前請求。
更新2:的Server.Transfer()
方法接受一個布爾值參數preserveForm
過載,這樣可以保留查詢字符串參數:
http://msdn.microsoft.com/en-us/library/aa332847(v=VS.71).aspx
你不能沒有回傳我不這樣做認爲。我建議將會話狀態中註冊頁面的詳細信息存儲起來,如果用戶返回該頁面,請從會話狀態重新填充字段。
//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
}
是的,我知道會議可以使用,但我想有沒有其他方式!我有更多的字段(30)在用戶註冊頁面 – 2010-07-06 10:38:41
我仍然認爲除了存儲表單信息服務器端,無論是在會話或數據庫中,還是將它們存儲在Cookie中(我認爲仍然需要服務器端代碼)。爲了使事情變得更容易,你可以創建一個簡單的具有get/set屬性的類來表示所有表單字段,然後將該類的一個實例存儲在會話狀態中,這樣會更易於管理。讓我知道你是否想要一個我的意思的例子。 – 2010-07-06 11:41:57
謝謝..!查看答案後也是一樣:) – 2010-07-06 11:56:45
當您重定向到另一個頁面,除非你做些什麼來阻止它,它就會失去第一頁的所有內容。可以想到的選項有:
在彈出窗口中創建卡片信息頁面。這將意味着您的主窗口在後臺保持不變。你最好使用純粹的客戶端代碼來做到這一點,但如果你需要服務器端代碼來做到這一點,它仍然是可能的,只是稍微費力一些。
保存重定向前發送的信息。這可能只是在會話或數據庫中,或者如果你願意,你甚至可以在客戶端使用cookie。然後,當您重新訪問該頁面時,您可以檢查是否保存了信息並自動加載。
如果您將用戶重定向到另一個頁面,該屏幕上的所有捕獲信息將會丟失。視圖狀態不保留在重定向上,但僅保留在重定向上,但僅限於回發/回調
跨重定向維護信息的唯一方法是使用會話變量,Cookie,甚至將數據保存到數據庫/ XML文件並在返回到該頁面時重新填充。
我建議你保存你的信息,因爲用戶被定向到信息卡,然後在返回時檢查值並重新填充它。
您可以將值存儲在ViewState/Session
並重定向到另一個頁面(卡信息頁面),然後在返回到註冊頁面時重新填充值。或者在同一頁面上顯示pop-ups
或panels
(使用Visible
屬性顯示/隱藏),您可以保留用戶輸入。 (如果您使用的是服務器端控件,則值不會被清除)。
您可以使用任何種類的「轉到下一頁」按鈕點擊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;
}
我覺得,其餘的代碼應該很容易實現。
Server.Transfer不會在這方面工作,因爲用戶使用需要查詢字符串參數的信息卡 – 2010-07-06 10:21:22
沒關係,稍微進一步閱讀似乎表明它可以保留查詢字符串(如果您需要)。 – 2010-07-06 10:48:27