1

我有一个数据输入表单,我已将其分成 5 页,我想确保用户每次都以正确的顺序浏览这些页面。导航设置为正确浏览,包括返回和更改前一页的面包屑。但是,我想确保他们不会在不先浏览较早页面的情况下进入后续页面(即,浏览页面 A 和 B,然后通过直接输入 URL 跳到 D,或者从 D 开始使用书签)。

我已经做了一些尝试来防止这种情况发生,我最近的一次是这个,它检查每个页面所需的会话变量:

public static string CheckForPageSkipping()
{
    var redirectTo = "";
    if (HttpContext.Current.Session["TestDate"] == null) redirectTo = "~/Auth/SignOff.aspx";
    if (HttpContext.Current.Session["Repairs"] == null) redirectTo = "~/Auth/RepairNotes.aspx";
    if (HttpContext.Current.Session["MeterNum"] == null)   redirectTo = "~/Auth/TestResults.aspx";
    if (HttpContext.Current.Session["PremiseOwner"] == null) redirectTo = "~/Auth/PremiseInfo.aspx";
    return redirectTo;
}

我在每个Page_Load事件期间都调用了它,如果它不是他们所在的页面,我会重定向到它返回的页面。这几乎奏效了,直到我意识到它会阻止您向后导航(它总是将您发送回您尚未完成的最新页面)。我确信我可以拼凑一些东西来完成这项工作,但我想看看是否有更好的方法来做到这一点。一些内置于 ASP.NET 中的东西,或者某些人过去构建的更优雅的东西。

我在 Google 和 StackOverflow 上的搜索尝试都没有产生有用的结果。也许我使用了错误的术语,但主要是我在这里写的东西(现在顶部提出的建议也没有帮助)。

4

4 回答 4

1

看起来您可以控制页面,所以为什么不摆脱它们并将代码放入用户控件中,在面板或占位符的一个页面中注册这些控件,并控制这些面板在代码中的可见性,以便您可以正确执行访问这些的顺序?

于 2013-01-15T18:13:54.220 回答
1

你看过<asp:wizard>内置控件吗?我认为它会满足您的需求,您可以针对许多不同的场景进行配置。这是描述其使用的链接:http: //msdn.microsoft.com/en-us/magazine/cc163894.aspx

另见当前官方文档:MSDN Library

于 2013-01-15T18:31:56.187 回答
0

如果您不想使用该Wizard控件并且您不想使用Panels,那么 Server.Transfer 或 Cross Page Posting 应该可以工作。无论使用哪种方法,检查PreviousPage都应该涵盖您的页面跳过问题。

Server.Transfer 具有您提到的 URL 奇怪,但在其他方面非常简单。

跨页面发布也非常适合您的需求。

  1. 将每个表单发布到下一个表单页面。
  2. 在那里接收和处理数据(如果设置正确,则使用强类型)。
  3. 仅在所有内容都签出后才加载新页面(PreviousPage 正确,数据有效)。

我承认,我自己没有使用这两种方法的直接经验,但我可以看到如何实施它们来处理您的情况。

于 2013-01-15T22:10:28.163 回答
0

这里有一个很好的模式解释了使用面板使用多部分表单。

使用面板的多部分表单

于 2013-01-15T18:28:34.113 回答