我如何-在ASP.NET中,当用户离开页面时保存页面中的信息?
在CMS中,我们拥有一个地方,我们可以使用户使用其网站层次结构来移动页面,添加和删除页面等。
我们使用拖放操作来实现移动页面。
每一步都必须保存在数据库中,并导出到许多HTML文件中。如果我们在每一步中都这样做,将会减慢用户的速度。因此,我们认为最好让用户随心所欲地玩耍,将每个更改保存到数据库,但是仅当他们离开页面以将其更改导出到HTML文件时才可以。
我们曾考虑让用户在准备提交更改时单击"发布"按钮,但是我们担心用户不会记得这样做,因为从他们的立场出发,一旦将页面移至在新位置完成操作。该按钮的另一个问题是,它与网站其他部分的行为不一致(例如,当用户在页面内移动文本时,更改将自动保存,因为只有一个HTML文件要更新)
那么,如何在离开页面时自动保存用户更改?
解决方案
当用户使用javascript离开页面时,应向用户发出警告。
从http://www.siafoo.net/article/67:
现代浏览器具有一个名为window.beforeunload的事件,该事件在发生任何会导致页面卸载的事件时立即触发。这包括单击链接,提交表单或者关闭选项卡或者窗口。
请访问此页面,以获取可在大多数浏览器中使用的示例作品:
http://www.webreference.com/dhtml/diner/beforeunload/bunload4.html
我认为在不先询问用户的情况下保存页面是一种不好的做法,这不是正常网页的工作方式。
样本:
<SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript"> <!-- function unloadMess(){ mess = "Wait! You haven't finished." return mess; } function setBunload(on){ window.onbeforeunload = (on) ? unloadMess : null; } setBunload(true); //--> </SCRIPT>
我能想到的最简单的方法是每次用户使用Ajax移动项目时都存储页面信息(例如,使用UpdatePanel,onUpdated事件,让它触发一些更新用户页面配置的脚本。
或者,.Net的WebParts实现自动执行此操作而无需程序员干预(除非我们要更改存储引擎,否则默认情况下它将使用本地mdb。
使用"发布"复选框/按钮,当用户与页面交互时,如果导致用户无法浏览/询问,则询问他们是否要发布,如果未选中该框/未单击按钮。请注意,我们可能不希望或者无法提示用户某些操作(关闭浏览器,访问其收藏夹菜单等)。
我会强迫他们单击"发布"之类的按钮。那是一个"培训"问题。
离开时自动保存更改可能会产生其他影响。例如,如果用户打开一条记录并在其中玩转,而又无意更改它,则他们将其关闭,例如word文档,excel等。 。我会让网站模仿该模型。
我们还必须记住,Web是一个断开连接的环境,不需要所有Web应用程序都像Windows应用程序一样运行。
如果用户未单击"发布/保存"按钮,则不会保存所做的更改,这取决于他们要记住要执行的操作。