我的结帐流程包含以下工作流程:
上述每个步骤都在同一个控制器中有自己的动作。
现在的问题是,如果这个人到达#5,并想要编辑地址,他们会回到#3。 但当他们点击提交时,他们会进入下一步#4,但他们应该直接回到#5。
我知道我可以通过查询字符串/表单传递信息,并告诉#3检查是否存在该密钥,如果存在,则重定向到#5。
是否有任何经过验证的最佳实践技术来管理asp.net-mvc(或一般)中的此类工作流程?
答案 0 :(得分:1)
通常我会设置一个会话来存储用户的状态和数据,并确定继续下一步的步骤。因此,调用后的控制器可以运行一些逻辑来确定用户所处的状态,然后调用呈现代码以输出与用户当前状态相关联的表单。
恕我直言,这简化了流程,因为您没有将“我的下一个状态”检查委托给表单级别,而是委托到一个集中位置,这样可以轻松地在未来添加新的业务逻辑。
希望这有帮助!
(您可以用不可见的表单字段,查询字符串等替换会话。)
答案 1 :(得分:0)
如果你真的像你说的那样“讨厌会话”,那么可能还有另一个选择,就是为所有“向后”操作传递一个查询字符串,定义下一步该去哪里。
这是大多数登录页面的工作方式 - 如果您无权查看页面,它将使用redirectUrl查询字符串参数集重定向到“登录”页面。然后,在成功登录后,您将被重定向到最初来自的页面。
只是为了简化你的代码,你可以重载控制器上的RedirectToAction()方法,使它重定向到给定的操作,除非有一个特殊的查询字符串,在这种情况下它重定向到那里。
编辑:我知道您提到这是一种可能性,但无论如何我发布了它,因为: 1)它没有任何问题(特别是如果你“讨厌会话”),2)你提到你的行动检查是否存在密钥,我认为可以按照我的描述更好地编写(使用过载 - 干)