C# 签出流程工作流,存在重定向问题

C# 签出流程工作流,存在重定向问题,c#,.net,asp.net-mvc,model-view-controller,C#,.net,Asp.net Mvc,Model View Controller,我的签出过程具有以下工作流: 结帐页 送货地址 编辑发货地址(添加/编辑) 交付方式 付款 下单 上述每个步骤在同一控制器中都有自己的操作 现在的问题是,如果这个人到了5号,想要编辑地址,他们会回到3号。 但当他们点击提交时,他们会进入下一步,即第4步,但他们应该直接返回第5步 我知道我可以通过查询字符串/表单传递信息,并告诉#3检查该密钥是否存在,如果存在,则重定向到#5 在asp.net-mvc(或一般情况下)中,是否有任何经验证的最佳实践技术来管理这样的工作流?通常我会设置一个会话来存储用

我的签出过程具有以下工作流:

  • 结帐页
  • 送货地址
  • 编辑发货地址(添加/编辑)
  • 交付方式
  • 付款
  • 下单
  • 上述每个步骤在同一控制器中都有自己的操作

    现在的问题是,如果这个人到了5号,想要编辑地址,他们会回到3号。 但当他们点击提交时,他们会进入下一步,即第4步,但他们应该直接返回第5步

    我知道我可以通过查询字符串/表单传递信息,并告诉#3检查该密钥是否存在,如果存在,则重定向到#5


    在asp.net-mvc(或一般情况下)中,是否有任何经验证的最佳实践技术来管理这样的工作流?

    通常我会设置一个会话来存储用户的状态和数据,并确定从哪个步骤继续到下一步。因此,被调用的控制器可以运行一些逻辑来确定用户处于哪个状态,然后调用呈现代码来输出与用户当前状态关联的表单

    IMHO,这简化了流程,因为您不需要将“我的下一个状态是什么”检查委托给表单级别,而是委托给一个集中的位置,这样可以很容易地添加新的业务逻辑

    希望这有帮助

    (您可以用不可见的表单字段、查询字符串等替换会话。)

    如果您真的像您所说的那样“讨厌会话”,那么可能还有另一种选择,那就是为定义下一步去向的所有“向后”操作传递查询字符串

    这就是大多数登录页面的工作方式——如果您无权查看页面,它将通过设置redirectUrl querystring参数重定向到登录页面。成功登录后,您将被重定向到原来的页面

    为了稍微简化代码,您可以在控制器上重载RedirectToAction()方法,这样它就会重定向到给定的操作,除非有一个特殊的查询字符串,在这种情况下它会重定向到那里

    编辑:我知道你提到这是一种可能性,但我还是发布了它,因为:
    1) 这没有什么错(特别是如果你“讨厌会话”),2)你提到过让你的动作检查键的存在,我认为这可以像我描述的那样写得更好(使用重载--DRY)

    什么是“我只是讨厌会话”的意思?你不喜欢跟踪后续(实际上是孤立的)帖子中的用户信息吗?我敢肯定这意味着他不理解这些帖子,statichippo。我使用cookies,只是不喜欢内存中基于服务器的会话。