带MVC的多步向导表单

时间:2010-11-29 15:51:14

标签: model-view-controller asp.net-mvc-2

我正在计划用asp.net mvc 2构建一个多步骤的表单。因此,我的Web应用程序将有5个页面对应5个步骤。每个步骤都有两个提交按钮,上一个和下一个。将存储每个步骤的输入数据以供稍后查看。例如,我们已经输入了步骤1,2,3,4的数据,现在我们在步骤5中。当我点击“之前”2次时,步骤3应该显示我之前输入的数据。类似的,当我点击“下一步”时,输入的数据也应保留在步骤4中(因为我们现在处于第3步)每个步骤使用的模型可能会有很大不同。

我正在寻找一种解决方案来保存每个步骤的数据。我正在考虑会话和tempdata,它们都有我必须考虑使用的缺点

  1. 会话

    • 默认会话是cookie会话,因此如果Web浏览器未启用cookie,则会话将无法正常工作。我也有一个问题,当IE没有cookie anabled时,会话变量只会在actor使用 hostname 访问Web应用程序的情况下丢失。 会话在IE中使用ip address url
    • Cookie会话:不安全,有很多约束并且有帖子问题(http://stackoverflow.com/questions/3972433/mvc2-cookieless-session-issue-using-post或http://forums.asp.net/p/1517391/3634908.aspx
  2. Tempdata:tempdata只会持续一个请求。
  3. 我非常感谢你的建议!

    非常感谢!

4 个答案:

答案 0 :(得分:2)

我总是使用会话。我已经看到你担心没有使用cookies的人,但我认为这些日子不存在问题,因为我不认为有很多用户拒绝使用cookies。

我对会话的偏好是它易于存储和检索,并且易于设置。 当您向外扩展(更多服务器)时,您可以轻松设置应用程序以将会话状态存储在SQL Server数据库中,这样您就可以为将来做好准备。

当步骤之间没有存储敏感信息时,我有时会使用隐藏字段,因为用户可以编辑隐藏字段的值。

如果帖子之间有很多信息需要分享,而你不需要很多隐藏字段,你也可以为你的存储创建一个对象(就像你在会话中创建它时创建的那样)和序列化对象,base64对其进行编码并将其存储在ONe隐藏字段中。

答案 1 :(得分:1)

您是否反对将数据粘贴到数据库中?这样,当他们进入“Prev”时,您只需从数据库中提取该页面的数据。您可以将该页面保存为“临时”或您希望表明用户尚未正式保存的任何状态。然后,您不必担心会话或类似的事情。

答案 2 :(得分:0)

TempData是在幕后使用Session变量实现的,因此您对会话的关注可以扩展到使用TempData。

如果向导很长很复杂,我可能会坚持使用数据库,否则如果它非常小而且简单,您可以考虑在表单字段中存储所有步骤的所有数据,并在步骤之间发布所有数据。

答案 3 :(得分:0)

我同意JonoW,我会考虑将隐藏字段存储在步骤之间(对我有用)