ASP.NET客户端脏表格处理

我一直在努力找到解决这个问题的最佳方法,这是因为以下两种情况之一,提醒ASP.NET Web表单的用户即将丢失数据:

– 通过链接点击更改表单, – 点击“返回”, – 关闭浏览器

我希望在他们这样做时出现一个简单的对话框,让他们可以改变主意。 如果他们这样做,那么表格仍然存在。 如果他们不这样做,继续。

我已经尝试了几个jQuery插件来处理这个问题,目前我正在使用dirty_form。 当我点击一个链接或尝试关闭窗口时它正在捕获脏表单并提醒我(它不会处理回来)。

不幸的是,处理脏的forms是不够的,因为我似乎无法做任何事情。 我的代码:

 $(document).ready(function () { $("#form2").dirty_form().dirty(function (event, data) { /*what here */ }); });  

我如何设置它,以便如果他们选择前进,它会这样做,如果他们不这样做,它不会?

另外,如何捕获浏览器“后退”function并以同样的方式处理它?

在SO的这个问题的答案之后,我在我们的应用程序中成功实现了这个dirty_form插件。 这就是我们最终做的事情:

 // A global variable to table any existing onbeforeunload event var oldOnBeforeUnloadEvent; // onDirty event that gets triggered by the plugin.. add visual cue to the user to show dirtiness function onDirty(event, data) { $("#form2 div.dirtyIndicator").addClass("redAsteriskBG"); } // onClean event that gets triggered by the plugin.. remove the dirty indicator function onClean(event, data) { $("#form2 div.dirtyIndicator").removeClass("redAsteriskBG"); } // Check for presence of any inputs that are changed function checkForDirtyElements() { var message = ''; var dirtyElements = $('.myChangedClassName').length; if (dirtyElements > 0) { message += "IF YOU CONTINUE, ALL YOUR CHANGES WOULD BE LOST!"; } return message; } // Our onbeforeunload event that does all the magic function myOnBeforeUnload() { var message = checkForDirtyElements(); if (message === '') { if (oldOnBeforeUnloadEvent !== null) { message = oldOnBeforeUnloadEvent(); } } if (message.length > 0) { return message; } } $(document).ready(function () { // On page load set-up/initialize the dirty form with onDirty and onClean events $("#form2").dirty_form({ changedClass: 'myChangedClassName' }).dirty(onDirty).clean(onClean); // Save the existing onbeforeunload event to a global variable and attach our custom onbeforeunload oldOnBeforeUnloadEvent = window.onbeforeunload; window.onbeforeunload = myOnBeforeUnload; });