2009-02-10 61 views
3

我正在开发一个非常小的调查应用程序,可能3-4页的Web应用程序。所以我的问题是保存调查数据的最佳方式是什么?存储调查数据的最佳方式?

到目前为止,我已经想出了以下方法。

  1. 保存到数据库并将每个调查标记为不完整。当用户提交调查检查的最后一个形式时,完成调查并在完成后将其标记为完整。

  2. 保存到会话并保存到数据库中,当用户提交最后一种调查形式时。

您对这些方法有什么看法?

回答

3

我已经有这种事情相当头疼,并建议不要使用会话,如果可能的话。当您的网站获得适度的流量时,或者ASP.NET感觉如此时,您可能会发现当.NET尝试释放一些内存时,您会失去所有会话。

我会尽快把它放在数据库中。使用Guid.NewGuid()来生成一个唯一的不可猜测的关键字,您可以在查询字符串中从一个页面传递到另一个页面:这将是您从数据库中检索记录的关键。你有没有考虑过

其他两个选项:

  1. 帖子从一个页面到下的响应。 (这可能比它的价值更麻烦。)

  2. 使用asp:向导控件。这样,您的3-4页实际上将在单个页面上进行3-4步。来自每个阶段的数据会自动存储在ViewState中,因此当您处于最后一步时,第一步中的输入字段仍然可供您访问。

(我还是会去为你选择1号虽然)。

+0

我会选择第一个选项,因为它比会话更强大。 guid(唯一标识符)好主意,我会在表格中添加guid,因为它将完全消除会话的需要。 谢谢 – Mohamed 2009-02-11 00:16:46

0

如果您希望他们能够在调查中途保存结果并在另一次回来完成调查,那么您必须存储调查的开始时间和结束时间以了解他们完成了它。到目前为止,您还必须存储所有的值。

由于它很小,我只是将它保留在会话中,然后在完成后将其保存到数据库中。

0

我认为第二个选择是你最好的选择。如果您的网站收到大量流量,选项1将给数据库带来更多压力,并且还会通过不完整的调查来混淆数据库。会话听起来是一个更好的选择,因为真的,除非它完整,否则不需要数据,是吗?

0

两者看起来都很好,这取决于您希望用户做什么或您希望用户的行为。

第一种方法将允许用户返回(即使在关闭浏览器后)以完成调查。如果你的调查很大并且用户在其他事情丢失之前无法完成,那么这是一个很好的观点,但是如果你想强制用户完成,这也是一个负面的问题,我的意思是,如果你不想完成调查。

第二种方法强制用户在开始的同时完成调查。如果您的调查很快并且您需要有关他们的完整数据,这是一个很好的观点,但如果您的调查很长,并且通常在用户完成调查之前分散注意力,这很不好。

我会说,每个页面的问题数量将是定义在两种方法之间进行选择的因素,也许它也适用于您。

2

不要为此使用会话。微软有一个很好的例子,说明如何不在TechEd使用的应用程序中进行调查。每次你必须考虑答案时,会议都会超时。使用ajax,保存每个答案,甚至是部分答案。如果遇到数据库性能问题,请在一定时间内收集所有调查的所有答案,并将其保存在一起。 对于某些JavaScript,只有在过去几秒内或在窗口关闭之前发生了某些变化时,才可以对服务器执行回调。

除非你有回答问题的时间限制。

2

如果您预计您的应用程序将来可能会增长(提供更长时间的调查,甚至可能以用户之间“相同”的结果和稍后恢复的形式),我肯定会与数据库选项。

1

这是我如何做到这一点:

  • 我产生从数据库中“问题”,从而只存在一个用来显示不同的问题页面。
  • 只要用户点击“下一步”,我就会保存每个问题的答案。这具有很大的优势,即用户可以回来并从她离开的地方开始。
  • 我使用与保存结果一起更新的指针跟踪进度。
  • 我不会使用会话,因为我不想冒数据丢失的风险,也不想让内存紧张。
  • 当指针==问题的数量时,标记为完成。