2013-01-15 14 views
1

跳过页面防止用户我有一个数据输入表格,我已经碎裂开到5页,我想确保用户去通过每一次的正确顺序的页面。导航的设置使其能够正确地通过它,包括面包屑返回并更改以前的页面。但是,我想确保,如果不先浏览较早的页面,它们就不会到达较晚的页面(即,通过页面A和B,然后通过直接输入URL直接跳到D,或者使用D开始书签)。从一个ASP.NET表单

我已经做了一些尝试,以防止这种情况,我最晚一班是这一点,这检查具体到每一个页面需要会话变量:

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上的搜索尝试都没有得到有用的结果。也许我使用的是错误的术语,但主要是我在这里写的东西(现在顶部提出的建议也没有帮助)。

+0

你有没有想过使用'Server.Transfer'在页面之间转换?网址没有变化,你可以加载你喜欢的任何页面。 –

+0

我没有想到这一点(不知道我知道这个功能)。看起来很有希望。我将不得不再看一看。谢谢! – techturtle

+0

好的,也许我没有实现它,但是当我用'Server.Transfer'替换了我的'Response.Redirect'语句时,它似乎首先起作用,但是接下来发生的事情是所有页面只显示一个页面在地址栏后面。所以从页面A移动到页面B仍然在地址栏中显示A,但是当从B移动到C时,它在地址栏中显示B. – techturtle

回答

1

好像你的网页,为什么不摆脱他们的控制,把代码放到用户控件,在面板或占位符,一个页面注册这些控件和控制这些面板的可见性的代码,以便你可以正确执行这些访问的顺序?

1

你有没有看着内置控制<asp:wizard>?我认为它会适合您的需求,并且您可以为许多不同的场景配置它。 下面是说明其使用的链接:http://msdn.microsoft.com/en-us/magazine/cc163894.aspx

也看到目前官方文档:MSDN Library

+0

当我第一次开始这个项目时,我确实记得使用这个想法。不记得我为什么没有。我想这是因为我使用的一些表格的复杂性和动态字段生成。我正在阅读你发布的文章,看看它是否值得转换回去。 – techturtle

0

如果你不想使用Wizard控制和你不希望使用Panel S,无论是服务器。转发或跨页面发布应该可以工作。无论采用哪种方法,检查PreviousPage都应该覆盖您的页面,以避免担忧。

Server.Transfer方法有你提到的网址古怪,但在其他方面非常简单。

Cross-Page Posting相当适当根据您的需要为好。

  1. 后每个表单到下一个表单页面。
  2. 在那里接收并处理数据(如果您正确设置了 ,则使用强打字)。
  3. 只有当所有内容检出时才加载新页面(PreviousPage为 正确,数据有效)。

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

相关问题