2015-02-08 78 views
-1

目前我正在嘗試使用ASP.NET MVC5構建一個網站。 我被卡住了。如何限制用戶導航回到上一頁並刷新?

問題:我希望當用戶轉到特定頁面時,他/她不應該能夠刷新頁面,返回到上一頁,複製任何內容,打印屏幕。

嘗試了多種不同的解決方案,如如下:

window.onload = function() { 
    if (typeof history.pushState === "function") { 
     history.pushState("jibberish", null, null); 
     window.onpopstate = function() { 
      history.pushState('newjibberish', null, null); 
      // Handle the back (or forward) buttons here 
      // Will NOT handle refresh, use onbeforeunload for this. 
     }; 
    } 
    else { 
     var ignoreHashChange = true; 
     window.onhashchange = function() { 
      if (!ignoreHashChange) { 
       ignoreHashChange = true; 
       window.location.hash = Math.random(); 
       // Detect and redirect change here 
       // Works in older FF and IE9 
       // * it does mess with your hash symbol (anchor?) pound sign 
       // delimiter on the end of the URL 
      } 
      else { 
       ignoreHashChange = false; 
      } 
     }; 
    } 
} 

<script type="text/javascript"> 
    window.onbeforeunload = function() { 
     return "Dude, are you sure you want to leave? Think of the kittens!"; 
    } 
</script> 

<script type="text/javascript"> 
function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); }; 

$(document).ready(function(){ 
    $(document).on("keydown", disableF5); 
}); 
</script> 

但沒有什麼似乎工作。

請建議。

+0

「我想要當用戶轉到特定頁面時,他/她不應該刷新頁面,返回到上一頁,複製任何內容,打印屏幕「;你確定你真的想要一個網絡應用程序嗎? – dandavis 2015-02-08 06:42:44

+0

是的。當他/她參加考試時,它會想要一個頁面。 – priyam 2015-02-08 06:44:47

回答

0

我能想到的唯一方法就是使用Web應用程序來做什麼,就是讓所有「頁面」成爲一個單一的視圖,使用AJAX從多個Action方法加載結果。如果您使用JavaScript/AJAX加載所有內容,則瀏覽器將無法跟蹤任何頁面歷史記錄。

0

不要這樣做!基於Web的應用意味着自由。用戶應該做任何他/她想要的。問題應該是:我應該如何設計我的應用程序來正確處理和刷新按鈕(而不是禁用它們)。禁用打印沒用,因爲在任何時候用戶可打印屏幕...

+0

是的,我同意。但是,可以說這是一個用戶登錄進行測試的考試網站,當他完成時,他點擊提交,並將其帶到結果頁面。考試頁面上的問題是隨機生成的,如果他刷新,那麼問題可能會改變 - 不要這樣。進入結果頁面後,用戶可以導航回到前一頁面(檢查頁面)並更改答案 - 不要那樣。請建議我該如何處理它。 – priyam 2015-02-08 07:12:20

+0

您可以記住服務器端的當前問題ID - 無論用戶將嘗試查看什麼頁面 - 您都會知道要顯示哪個問題。你應該記住(在服務器端)哪些問題與答案,哪些不是,並防止改變答案... – lujcon 2015-02-08 07:34:57

1

您可以使用的window.open參數的javascript做到這一點,例如

window.open('yourUrl','windowName','toolbar=no'); 

但是我不會推薦。相反(根據您對lujcon的回答發表的評論),您應該正確設計您的控制器並查看模型,以防止您所描述的問題。例如,如果用戶已經回答了一個問題,請添加一個標記,然後如果他們試圖爲同一問題發佈另一個答案,則可以檢查該標記並防止更新/顯示錯誤消息等。

+0

嘿,我是新來的asp.net。你能告訴我如何在控制器已經加載的頁面顯示任何錯誤信息嗎? – priyam 2015-02-08 07:26:32

+0

@priyam,這是一個新問題的主題,取決於你的應用程序的更多細節和理解,但你可以做一些簡單的事情'

@ViewBag.Message
',然後在控制器中'ViewBag.Message =「某個消息」;' – 2015-02-08 07:33:56

+0

這仍然不會重新加載/刷新頁面,因爲我仍然必須返回視圖? – priyam 2015-02-08 07:42:44

相關問題