簡體   English   中英

ASP.NET MVC Web應用程序中的后退按鈕問題

[英]Back Button issue in ASP.NET MVC Web Application

這是很難解釋的問題。

讓我描述一個場景。

  1. 我有主頁,注冊頁面,登錄頁面和儀表板頁面
  2. 當我從“注冊”頁面注冊應用程序並點擊“提交”時。 應用程序將處理請求,並將在Dashbord上以用戶登錄的身份重定向我。現在,問題來了。 當我點擊后退按鈕。 我看到注冊頁面,其中的字段由值填充。 這不應該發生。
  3. 當我登錄系統並從儀表板登錄時,我點擊了瀏覽器。 它會顯示我的登錄頁面。 這也不應該發生。

我希望它能清楚說明我在尋找什么。

我嘗試過的幾種可能的解決方案:

  1. 使用代理頁面。 與許多郵件服務正在執行的操作類似。 但是在MVC 3中,它將無法檢測到頁面加載事件,並且頁面上的控件要少得多。
  2. 在代理頁面window.history.forward()上使用javascript函數
  3. 呈現后過期代理頁面。

我不完全相信上述解決方案。 我希望以系統的方式獲得一些最佳實踐,並以優雅的方式解決問題。

如果您有關於我正在使用的現有解決方案的建議,以及您有很好的解決方案,請幫助我。 請分享。

謝謝大家

僅供參考。我正在使用ASP.NET MVC 4進行開發。

使用history.js控制history.back()事件。 您只需替換最后一頁的狀態以指向儀表板或所需的頁面(在Web應用程序內部;出於安全原因,禁止跨域)。 當用戶單擊“后退”按鈕時,將加載定義的頁面,而不是登錄頁面。

https://github.com/browserstate/History.js/

對於這種UI交互,代理解決方案太復雜了。 客戶端控制是您解決方案的最佳方法。 HTML5參考文獻為此定義了History API( http://www.w3.org/TR/html5/history.html )。 不幸的是,並不是所有的瀏覽器都立即實現它。 那是因為history.js腳本存在。

在用於注冊和登錄頁面的Controller / Action方法中,檢查用戶是否已經登錄並重定向到。 儀表板。

這樣的事情取決於您的身份驗證方式。

public ActionResult Register()
{
  //If already logged in no need to show register page again
  if(Request.IsAuthenticated)
    return Redirec("Dashboard");

  return View();
}

編輯:更新了答案以解決已評論的問題

我創建了具有以下內容的部分視圖

<input type="hidden" id="reloader" value="" />
<script type="text/javascript">
  if (document.getElementById("reloader").value === "reload")
      window.location.reload();
  else
      document.getElementById("reloader").value = "reload"
</script>

然后,可以在注冊和登錄視圖中使用@Html.Partial('PartailViewName')包含該內容。

由於使用后退按鈕時會緩存DOM,因此如果用戶使用后退按鈕,則上述腳本將重新加載頁面。

如果與我的第一個答案一起使用,您將獲得想要的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM