ASP.NET Postback and URLs

3
我有一个页面需要用户完成多个步骤,但每个步骤都在同一个ASPX页面上执行,只是显示不同的面板。
然而,每个步骤都需要有不同的URL,这可以通过查询字符串参数来实现,例如:
第一步: /member/signup.aspx?step=1
第二步: /member/signup.aspx?step=2
第三步: /member/signup.aspx?step=3
但我不想每次用户继续下一步时都要重定向到新的URL,这将涉及大量重定向和页面加载上的switch语句以确定用户所处的步骤。
如果在原始请求返回给用户时能够更改显示给用户的URL,即当用户在第1步上点击“下一步”时,页面进行一些处理,然后更改响应,使用户看到第2步的URL,但不需要任何重定向,那将更好。
如果您有任何想法,请告诉我。

在处理过程中,URL 是否必须不同,还是仅用于返回目的? - Joel Etherton
6个回答

2

你能否将你的面板转换成向导控件中的步骤?


1

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


0

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

我建议挑战此要求。为什么有人需要跳到中间步骤呢?如果是为了向用户显示进度,请在页面上进行,而不是在URL中。


0

如果你需要每个步骤有不同的URL,那么Response.Redirect是唯一的选择。但是如果你想避免重定向,可以使用IFrame,但是IFrame URL对用户在浏览器上是不可见的。我认为重定向选项很丑陋(对于服务器和客户端),因为在这种情况下,你首先发布页面,然后获取该页面。最好的解决方案是POST BACK并跟踪步骤的某些变量。


0

您可以实现表单或URL重写,以使您的网址最终变成

/member/signup/step1/

/member/signup/step2/

/member/signup/step3/

要做到这一点,请使用HttpContext.RewritePath方法,这意味着您可以将/member/signup/step1/重写为/member/signup.aspx?step=1。例如,请参见这里

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


-1

请查看 server.transfer


Server.Transfer 对于他想要的东西和 Response.Redirect 没有任何区别。 - Joel Etherton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接