ASP.NET回发和URL

时间:2010-01-20 12:51:25

标签: c# asp.net http url

我有一个页面需要用户完成几个步骤,但是在同一个ASPX页面上执行步骤,显示不同的面板。

但是,要求每个步骤都有不同的URL,这可能是一个简单的查询字符串参数,例如:

第1步: /member/signup.aspx?step=1

第2步: /member/signup.aspx?step=2

第3步: /member/signup.aspx?step=3

但是我不希望每次他们继续下一步时都要将用户重定向到新的URL,这将涉及大量重定向以及页面加载上的switch语句以确定哪一步用户已开启。

如果我可以更改原始请求发送回用户时显示给用户的URL会更好,即用户在页面的步骤1点击“下一步”然后进行一些处理然后改变响应这样用户就可以看到第2步URL但没有任何重定向。

非常感谢任何想法。

6 个答案:

答案 0 :(得分:2)

您可以将Panel转换为Wizard控件中的步骤吗?

答案 1 :(得分:0)

这可能比您想要的要复杂一些,但您可以使用提交按钮的PostBackUrl属性来实现此效果。我假设每个面板都有自己的“提交”按钮,他们都可以使用这个属性来“推进”这个过程。缺点是,为了获得提交的控件,您需要使用Page.PreviousPage属性来访问任何控件及其值。

答案 2 :(得分:0)

您可以根据查询字符串值以编程方式更改每个PostbackUrl上“下一步”按钮的Page_Load属性。这有点奇怪,因为您无法使用标准事件处理程序进行按钮单击,并且您必须使用Page的PreviousPage属性来获取上一个选项卡中的数据

我说要挑战这个要求。为什么有人需要跳到中间步骤?如果是向用户显示进度的情况,请在页面上执行此操作,而不是在URL中执行此操作。

答案 3 :(得分:0)

您要求每个步骤都有不同的URL,而Response.Redirect是唯一的选项。由于您要避免重定向,因此可以使用IFrame,但用户在其浏览器上看不到IFrame URL。我认为重定向选项是丑陋的(对于SERVER和CLIENT),因为在这种情况下,您首先在页面上发布而不是获取该页面。最好的解决方案是POST BACK,有一些可变的跟踪步骤。

答案 4 :(得分:0)

您可以实施表单或网址重写,以便您的网址最终成为

/构件/注册/步骤1 /

/构件/注册/ step2的/

/构件/注册/步骤3 /

要执行此操作,请使用

HttpContext.RewritePath方法,这意味着您可以将/ member / signup / step1 /重写为/member/signup.aspx?step=1。查看示例here

我还会使用PRG(post request get)模式,以便每个下一个链接将该步骤的表单数据发布到会话,然后将用户重定向到正确的下一个URL。这将确保用户可以安全地在步骤之间来回导航,并且所有帖子中的网址都将保持不变。

答案 5 :(得分:-1)

查看server.transfer