我正在开发一个非常小的调查应用程序,可能是 3-4 页的 Web 应用程序。所以我的问题是保存调查数据的最佳方法是什么?
顺便说一句,到目前为止,我想出了以下方法。
保存到数据库并将每个调查标记为不完整。当用户提交最后一份调查表时,检查调查的完整性,如果完成则将其标记为完成。
当用户提交最后一份调查表时,保存到会话而不是保存到数据库。
你觉得这些方法怎么样?
我正在开发一个非常小的调查应用程序,可能是 3-4 页的 Web 应用程序。所以我的问题是保存调查数据的最佳方法是什么?
顺便说一句,到目前为止,我想出了以下方法。
保存到数据库并将每个调查标记为不完整。当用户提交最后一份调查表时,检查调查的完整性,如果完成则将其标记为完成。
当用户提交最后一份调查表时,保存到会话而不是保存到数据库。
你觉得这些方法怎么样?
我对这类事情有些头疼,如果可能的话,我建议不要使用 Sessions。当您的站点获得适度的流量时,或者如果 ASP.NET 只是喜欢它,您可能会发现您丢失了所有会话,因为 .NET 试图释放一些内存。
我会尽快将其放入数据库中。使用 Guid.NewGuid() 生成一个唯一的不可猜测的键,您可以在查询字符串中从一页传递到下一页:这将是您从数据库中检索记录的键。
您尚未考虑的另外两个选项:
将响应从一页发布到下一页。(这可能比它的价值更麻烦。)
使用 asp:Wizard 控件。这样,您的 3-4 页实际上将是单个页面上的 3-4 个步骤。每个阶段的数据都会自动为您存储在 ViewState 中,因此当您处于最后一步时,您仍然可以访问第一步中的输入字段。
(不过,我仍然会选择您的选项 1。)
不要为此使用会话。微软有一个很好的例子,说明如何不在他们在 TechEd 使用的应用程序中进行调查。每次您必须考虑答案时,会话都会超时。使用 ajax,保存每个答案,甚至是部分答案。如果您遇到数据库性能问题,请在一定时间内收集所有调查的所有答案,并将它们保存在一起。使用一些 javascript,您可以仅在过去几秒钟内发生更改时或在窗口关闭之前对服务器进行回调。
当然,除非你有回答问题的时间限制。
如果您预计您的应用程序将来可能会增长(提供更长的调查,甚至可能以用户可以在“中间”结果相同并在以后恢复的形式),我肯定会选择数据库选项。
这是我的做法:
如果您希望他们能够在调查中途保存他们的结果并在另一个时间回来完成它,那么您必须存储调查的开始时间和结束时间才能知道他们完成了它。到目前为止,您还必须存储它们的所有值。
由于它很小,我只会将其保留在会话中,然后在完成后将其保存到数据库中。
我认为第二种选择是你最好的选择。如果您的网站访问量很大,选项 1 会给数据库带来更大的压力,并且还会因为不完整的调查而使数据库变得混乱。会话听起来是一个更好的选择,因为实际上,除非数据完整,否则您不想要数据,对吗?
两者看起来都不错,这取决于您期望用户做什么或期望用户表现什么。
第一种方法将允许用户返回(即使在关闭浏览器之后)以完成调查。这是一个好点,如果您的调查很大并且用户在迷失在其他事情之前无法完成它,但是如果您想强迫用户完成,这也是一个负面点,我的意思是,如果您不希望不完整调查。
第二种方法强制用户在开始调查的同时完成调查。如果您的调查很快并且您想要有关它们的完整数据,这是一个很好的观点,但如果您的调查很长并且通常用户在完成之前会分心,那就不好了。
我想说,每页的问题数量将是我在两种方法之间选择的决定性因素,也许它也适合你。