2016-11-03 110 views
0

我在「精靈般的」工作流程得到了一些ASP.NET Web表單:後退按鈕處理

形式的提交,重定向到形成B.形式B進行提交,重定向到窗體C.提交表格C,重定向到Success.Aspx,它告訴用戶提交已成功並且數據庫已更新。

此時,用戶不應該能夠返回到表格C並重新提交。但是,如果用戶在Success.aspx上單擊瀏覽器的後退按鈕,則表單C上不會觸發服務器端事件。Page_Load不會再次觸發。 C表格是否知道它正在重新訪問,如果是,如何?

或者,如果Form C知道它正在被重訪的方式,是否有一些設置可以在Form C的服務器端Submit-handler中設置,這會導致頁面過期並將用戶重定向到Form A ?

P.S.我試着在我的C型的Page_Load中設置緩存過期,但它並沒有引起Page_Load中使用後退按鈕重新訪問該頁面時,重燒:

  Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      Response.Cache.SetExpires(DateTime.Now - new TimeSpan(1, 0, 0)); 
      Response.Cache.SetLastModified(DateTime.Now); 
      Response.Cache.SetAllowResponseInBrowserHistory(false); 

P.P.S.但是,這(通過@ GH9在評論的鏈接)有預期的效果:

 Response.Cache.SetNoStore(); 
     Response.Cache.AppendCacheExtension("no-cache"); 
     Response.Expires = 0; 
+3

http://blog.maskalik.com/asp-net/resolving-browser-back-button-with-caching-pages/ a快速谷歌'迴應按鈕asp.net'帶來了噸答案 – gh9

+0

爲什麼沒有被激發的原因是頁面從瀏覽器緩存中加載。沒有新的請求。也有所有重定向的原因嗎?你可以使用'asp:Panels'在aspx頁面上處理所有這些,你可以根據需要顯示/隱藏? –

+0

@ gh9:那些Google答案沒有upvotes告訴我他們的方法是最佳實踐。這就是我們來這裏的原因,不是嗎? – Tim

回答

1

我發現這裏面可能會幫助您:

http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html

作者:蘇雷什Dasari

在頁面的標題中,放置應在所有瀏覽器中工作的JavaScript,以防止用戶使用後退按鈕到達頁面。

<script type="text/javascript" language="javascript"> 
function DisableBackButton() { 
window.history.forward() 
} 
DisableBackButton(); 
window.onload = DisableBackButton; 
window.onpageshow = function(evt) { if (evt.persisted) DisableBackButton() } 
window.onunload = function() { void (0) } 
</script> 

中的JavaScript會導致瀏覽器前進,就好像用戶在瀏覽器中點擊前進按鈕。

您還可以更改頁面的緩存,以便在用戶嘗試返回時顯示爲過期。

以下添加到該文件的頂部:

using System.Web; 

在Page_Init或Page_Load事件方法執行以下操作:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1)); 
Response.Cache.SetNoStore(); 

從以往的經驗,我可以告訴你的JavaScript部分是一個很好的解決方案,可以阻止用戶使用後退按鈕。

+0

歡迎來到Stack Overflow。 ;) – modiX

+0

我讀過,禁用後退按鈕是不好的做法,我寧願嘗試找到一個解決方案,導致我的Page_Load事件(重新)在代碼隱藏中觸發。 – Tim