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