2012-10-03 74 views
1

我有一個ASP.NET Web窗體(C#),用戶填寫,它有一對夫婦的下拉,導致後背上,一些導致回發確認名單。我也使用了幾個不同的更新面板。一個面板對用戶輸入可見,另一個面板在用戶單擊提交併將數據添加到數據庫後出現。確認面板(最後一個面板)也向用戶顯示確認編號。ASP.NET Web窗體和F5刷新問題

最後一個面板顯示器之後,我想阻止該網頁重新加載當用戶按F5或刷新。原因是,我不希望用戶不小心點擊刷新或F5並丟失確認號碼和消息。當用戶按下F5時,瀏覽器將其解釋爲想要加載新頁面,並且在那時會話被清除(如下面的代碼所示)。

我的第一個想法是重印信息和確認號碼,並確保保持它的面板保持可見。我打算在下面的代碼的else部分這樣做 - 但由於有多個回發,並且它們都觸發頁面加載,所以這是行不通的,除非有確定回發是否是表單的結果元素或f5鍵。

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      if (!IsPostBack) 
      { 
       Session.Clear(); 
       GetList(); 
      } 
     } 
     catch (Exception ex) 
     { 
      //Do something(); 
     } 
    } 

我見過的建議使用Javascript幾個不同的崗位,但我避免如果可能的話,在偏遠的機會,有人已經關閉了JavaScript。

這裏是程序的流程: 用戶打開的形式,在contactpanel領域填充和點擊提交。這些字段使用ASP.NET服務器驗證控件進行驗證,如果一切正常,則將數據發送到數據庫並返回確認編號。最後,將contactpanel設置爲visibility = false,並將confirmationpanel設置爲visibility = true。

希望這會有所幫助。感謝任何建議。

感謝,

+0

我99%肯定,使用更新面板需要Javascript ......如果它工作圍繞它通過刷新整個頁面,那麼你真的最好重新設計你的網站是如何工作的,如果必須工作,而JavaScript的 – Earlz

+1

我認爲禁用JavaScript的人可以忍受偶然按下F5的問題,這種情況經常不會發生......您試圖通過服務器端解決方案來解決客戶端問題,通常以難以維護的代碼。 – Vache

+0

使用Javascript。根據您的目標受衆,您可能需要執行Javascript檢測,並向沒有它的訪問者發出警告。如果這是2005年,我會說是的,你的擔心是有效的,但沒有。人們需要Javascript;對每個人都好。但是,說實話,我不明白Javascript是如何幫助你解決問題的。如果人們刷新頁面,除非你想出另一個解決方案,否則它仍然會重置它。 –

回答

2

移動你的內容是最終的畫面(確認)上,以一個全新的頁面。無論保存哪些數據以獲得該確認,都應該使用某種類型的數據存儲(如數據庫),然後訪問者需要將任何ID或變量提取出來,這些信息應該放在Session var中。這種方式當用戶刷新頁面時,他們仍然會看到你想要的內容。無論如何,這幾乎是我們不得不在一天中完成所有表格的方式。

例如:

~/form_page.aspx 
- User lands 
- Fills in information 
- Post backs save data as the user progresses 
- Save all data collected to a resource such as a database 
- Save an ID to access that information to a Session variable 
- Redirect user to... 

~/form_thankyou.aspx 
- On load, get the Session variable needed to pull the information 
- Retrieve information from the resource 
- Display results to user 

(這是不實際的代碼,我只是具有與該格式的麻煩。)

使用這種技術也將使它更容易在你的SEO /度量團隊跟蹤轉換(即使有很多其他方式)。

+0

+1這被稱爲Post/Redirect/Get,對於任何在線任何事務來說都是至關重要的。 –

+0

我決定用你的方式去使用Post/Redirect/Get。它解決了這個問題,比我想象的要容易實現。謝謝!最困難的是確定是否需要使用Server.Response或Response.Redirect。在我發生了一些初始錯誤之後,例如列出整個URL而不僅僅是頁面,這個過程就起作用了,問題解決了。哦,我用了Respone.Redirect。 –

+0

不錯的選擇。你應該幾乎總是使用Response.Redirect。在我看來,Server.Transfer應該從未見過白天。它的用途幾乎是不實用的,人們常常會感到困惑,並試圖以錯誤的理由使用它。 –