我如何 - 在ASP.NET中保存用户离开页面时页面中的信息?

时间:2008-09-25 11:40:41

标签: asp.net page-lifecycle

在我们的CMS中,我们可以让用户使用他们的网站层次结构 - 移动页面,添加和删除页面等。

我们使用drag&放下来实现移动页面。

每次移动都必须保存在数据库中,并导出到许多HTML文件中。如果我们在每一步中都这样做,它将减慢用户的速度。因此,我们认为最好让用户尽可能多地玩游戏,将每次更改保存到数据库,但只有当他们离开页面时 - 才能将更改导出到HTML文件。

我们考虑让用户在准备提交更改时点击“发布”按钮,但我们担心用户不会记得这样做,因为从他们的立场来看,一旦他们移动了页面到一个新的地方 - 行动完成。该按钮的另一个问题是它与站点其他部分的行为不一致(例如,当用户在页面内移动文本时,更改会自动保存,因为只有1个HTML文件需要更新)< / p>

那么我们如何在离开页面时自动保存用户更改?

4 个答案:

答案 0 :(得分:3)

当用户使用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>

答案 1 :(得分:1)

我能想到的最简单的方法是每次用户使用Ajax移动项目时存储页面信息(例如,使用UpdatePanel,onUpdated事件,让它激活一些更新用户页面配置的脚本。

或者 - .Net的WebParts实现在没有程序员干预的情况下自动执行此操作(除非您想要更改存储引擎,否则它默认使用本地mdb。

答案 2 :(得分:1)

使用“发布”复选框/按钮,当用户以导致他们导航的方式与页面交互时询问他们是否要发布如果未选中该框/未单击按钮。请注意,您可能不想要或不能提示用户的操作(关闭浏览器,访问他们的收藏夹菜单等)。

答案 3 :(得分:1)

我会强制他们点击发布等按钮。这是一个“培训”问题。

离开时自动保存更改可能会产生其他后果。例如,如果用户打开一个记录并使用它并且无意更改它,则它们将其关闭,如word文档,excel等。 。我希望你的网站模仿那个模型。

您还必须记住,Web是一个断开连接的环境,并不需要像Windows应用程序一样运行所有Web应用程序。

如果用户没有点击发布/保存按钮,则不会保存更改,这取决于他们记得要做什么。