代码之家  ›  专栏  ›  技术社区  ›  Michael Edwards

ASP.NET回发和URL

  •  2
  • Michael Edwards  · 技术社区  · 15 年前

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

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

    步骤1: /会员/注册.aspx?步骤=1

    步骤2: /会员/注册.aspx?步骤=2

    步骤3: /会员/注册.aspx?步骤=3

    不过,我不想每次用户继续下一步时都将其重定向到新的URL,这将涉及大量的重定向和页面加载上的switch语句,以确定用户所处的步骤。

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

    任何想法都会受到极大的赞赏。

    6 回复  |  直到 15 年前
        1
  •  0
  •   Joel Etherton    15 年前

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

        2
  •  2
  •   PhilPursglove    15 年前

    你能把你的面板转换成 Wizard 控制?

        3
  •  0
  •   Graham Clark    15 年前

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

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

        4
  •  0
  •   Adeel    15 年前

    您要求每个步骤都有不同的URL,而不是响应。重定向是唯一的选项。由于要避免重定向,可以使用iframe,但iframe url对用户在其浏览器上不可见。我认为重定向选项很难看(对于服务器和客户机),因为在本例中,您首先发布在页面上,然后再获取该页面。最好的解决方案是通过一些可变的跟踪步骤进行回发。

        5
  •  0
  •   Sheff    15 年前

    您可以实现一个表单或URL重写,这样您的URL最终会

    /会员/注册/步骤1/

    /会员/注册/步骤2/

    /会员/注册/步骤3/

    为此,请使用

    httpContext.rewritePath方法,这意味着您可以重写/member/signup/step1/to/member/signup.aspx?例如,步骤=1。看到一个例子 here .

    我也会用 PRG (post-request-get)模式,以便每个下一个链接将该步骤的表单数据发布到会话,然后将用户重定向到正确的下一个URL。这将确保用户可以安全地来回浏览这些步骤,并且URL在您的所有文章中都将保持不变。

        6
  •  -1
  •   Andrew    15 年前

    签出server.transfer