2008-10-30 27 views
3

我想提醒用戶,當他們嘗試關閉瀏覽器窗口如果他們沒有保存他們在Web表單中所做的更改。ASP.NET:警告上更改數據關閉窗口

我正在使用ASP.NET 3.5(與ASP.NET Ajax)。

有沒有可以輕鬆實現的通用解決方案?

編輯:也許我的問題不明確:我專門找這在ASP.NET服務器控件的方法優雅地集成的方式。

+0

有一個偉大的jQuery的答案在這裏:[http://stackoverflow.com/questions/140460](http://stackoverflow.com/questions/140460 ) – MGOwen 2009-09-29 01:40:20

回答

0

在Page_Unload事件中(或在您的body標籤中調用此函數,<body onunload="onPageUnload();">),您可以檢查表單中是否包含數據。然後,你可以運行一些Java:

<script language="text/javascript"> 
    function onPageUnload() { 
     var oConfirm = window.confirm("You have unsaved form data, are you sure you want to close this window?"); 
     if(oConfirm){ 
      //Close 
     }else{ 
      //Dont 
     } 
    } 
</script> 

見它是如何工作了雅

編輯:這可能不會阻止窗口關閉,但它會提醒你的用戶,他們在未保存的數據的形成。

確認不能跨瀏覽器工作,我會調查一種不同的方法並在此處發佈。

+0

如果關閉瀏覽器,我認爲這不會運行。它也不適用於跨瀏覽器。 – 2008-10-30 13:07:03

0

如其他人所說的,你要看看window.onunload/onbeforeunload事件。這個事件的問題在於,只要頁面被卸載,它就會被調用。不僅在瀏覽器窗口關閉時,而且當您單擊同一瀏覽器窗口中的鏈接以轉至同一站點上的其他頁面時也是如此。你仍然可以做你想做的事情,但是如果你能預料到這種行爲,它會有所幫助。

1

您可以創建一個控件,該控件擴展了IExtenderProvider並創建了用於跟蹤更改的JavaScript(或者更可能使用更改跟蹤機制註冊控件)。

你仍然需要在Javascript中實現更改跟蹤,除非你想要很多回傳。

我在前僱主的幫助下使用了Prototype.Js。我認爲唯一困難的是Internet Explorer和Firefox需要設置「取消導航」標誌的方式之間的區別。

2

只需添加window.onbeforeunload事件。這顯示了一個模式窗口,您可以決定保留或離開頁面。

window.onbeforeunload = function (event) { 
    var message = 'All changes will get lost!'; 
    if (typeof event == 'undefined') { 
    event = window.event; 
    } 
    if (event) { 
    event.returnValue = message; 
    } 
    return message; 
} 

所有瀏覽器都會提供標準信息(「您確定要離開此頁嗎?」)以及您的自定義信息。

所以窗口將是這樣的:

--------------------------------- 
| Are you sure you want to  | 
| navigate away from this page? | 
|        | 
| All changes will get lost! | 
|        | 
|  [Cancel]  [Ok]   | 
---------------------------------