带有Post / Redirect / Get的ASP.NET向导

时间:2010-12-03 15:32:47

标签: asp.net design-patterns wizard post-redirect-get

我已经习惯了Post / Redirect / Get模式,我发现它是一个非常好的程序,它似乎让我更多地考虑页面结构,而不是依赖在ASP.Net事件上经常。

我目前正在为网站编写向导功能,但不使用ASP.NET向导控件,而是使用MultiView手动处理它。通常在过去,我希望典型的用户体验是 GET> POST> POST>对于向导的每个后续步骤,POST 等。但是我现在正在考虑使用更多的 P / D / G 方法,人们经常使用他们的向导吗?

我目前的想法是,一旦用户完成了一个步骤并且他们选择继续,我的包含当前向导信息的会话对象将被保存回会话,然后 GET 重定向将返回向导页面。当向导页面加载时,将询问Session对象以确定向用户显示的正确步骤。

我可以看到两个很好的优势:

  1. 它具有 P / R / G 的通常好处,它消除了刷新问题以及
  2. 用户可以离开向导并返回到它(如果他们的会话仍处于活动状态),他们将直接进入正确的步骤。
  3. 人们认为这是一个更清洁的设计吗?有明显的缺点吗?我想我可能会变成一个愤世嫉俗的程序员,并且更少信任ASP.Net和Postback生命周期,但是这种方法不会产生更多的代码吗?如果我没有实现它,我必须写一个针对用户刷新的所有检查,或者尝试导航到他们不应该执行的步骤。

2 个答案:

答案 0 :(得分:1)

正如您所描述的那样,该方法的一个问题是没有“后退”功能,这是奇才的典型期望。此外,请注意,有人可能希望能够在不同的浏览器选项卡中同时进行向导的多个“会话”,并且您的系统会阻止此操作。

“后退”功能可以包含在“后退”链接/按钮中的特殊查询字符串值,该值指示会话存储对象备份一步。一个会话中的多个实例需要更多涉及的内容;或许只是将数据存储在视图状态中,或者为“向导实例”创建一个键。或者,您可能决定仅支持向导的单个实例在任何时间运行。 (诚​​然,无论如何,某人试图同时运行多个向导实例可能是极其罕见的情况)

答案 1 :(得分:1)

是的,这是一个更清洁的设计。

唯一的缺点是额外的往返(用于重定向)和slightly increased complexity of displaying status messages

我再也不会将POST结果返回给用户了。

相关问题