2013-02-19 71 views
2

我在asp.net webforms中工作。我正在收集表單中的用戶輸入,例如Page1,其中包含多個服務器控件,如文本框,組合框和單選按鈕。當用戶點擊保存按鈕時,將會顯示一個新頁面,比如頁面2,其中顯示輸入的所有值以進行驗證。 Page2由Page1的按鈕單擊事件中的Server.Transfer(「〜/ Page2」)方法顯示。在第2頁中,用戶輸入的值由讀PreviousPage屬性獲得的,如下所示:如何在asp.net中保留之前的頁面值

var memberData = PreviousPage.dependentData; 

該第二頁具有一個取消按鈕。當用戶發現一些數據輸入錯誤並想回到Page1時,他們可以點擊這個按鈕。取消按鈕單擊事件在客戶端運行下面​​的代碼:

if (confirm('Are you sure to leave this page?')) { 
       window.history.back(1); 
      } 

的問題是,當達到第1頁,所有的用戶輸入的值都沒有了。請讓我知道如何構建這兩個頁面,以保留上一頁(Page1)中的值。

感謝

+0

會議,餅乾,視圖狀態,查詢字符串,這一切都取決於數據的敏感性,以及有多少數據是 – 2013-02-19 22:22:36

回答

2

你必須保存這些值地方使這兩個網頁訪問它們。大多數情況下,這是在數據庫中完成的,但如果需要,也可以使用SessionCache或甚至Cookie

由於這是用戶特定的,我懷疑Session是你最好的選擇。創建一個簡單的數據結構來匹配數據,並保存到會話:加載你的其他頁面時

var userData = new UserData(); 
userData.Name = //Get from form; 
userData.Age = //Get from form; 

HttpContext.Current.Session["UserData"] = userData; 

然後:

var userData = HttpContext.Current.Session["UserData"] as UserData; 

if(userData != null){ 
    //Do some stuff! 
} 

public class UserData{ 
    public String Name {get; set;} 
    public Int32 Age {get; set;} 
} 

然後,當用戶提交頁面

現在......有這種想法的警告你。例如,如果您在load balancer後面的多臺服務器上運行此操作,那麼您需要確保使用粘滯會話或至少某種持久性Session Provider

我猜我說的只是掌摑到您的應用程序:)這之前做一些功課

+0

感謝您的建議。如果我將Server.Transfer()更改爲Response.Redirect(),它會有幫助嗎? – user466663 2013-02-21 16:14:38

+0

@ user466663 - 它沒有區別。當你做一個Server.Transfer()時,它只是將與原始請求關聯的所有請求信息傳遞給新頁面。您仍然必須使用會話或其他機制來堅持信息。 – Josh 2013-02-21 16:24:52

相關問題