【问题标题】:ASP.NET Postback and URLsASP.NET 回发和 URL
【发布时间】:2011-01-07 06:26:18
【问题描述】:

我有一个页面需要用户完成几个步骤,但是步骤是在同一个 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,但没有任何重定向。

任何想法都将不胜感激。

【问题讨论】:

  • 是否有必要在处理过程中显示不同的 url 或仅用于返回目的?

标签: c# asp.net http url


【解决方案1】:

您能否将您的面板转换为Wizard 控件中的步骤?

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          /member/signup/step1/

          /member/signup/step2/

          /member/signup/step3/

          要做到这一点,请使用

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

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

          【讨论】:

            【解决方案6】:

            查看 server.transfer

            【讨论】:

            • Server.Transfer 与他想要的 Response.Redirect 没有什么不同。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-12
            • 2012-04-10
            • 2023-03-08
            • 1970-01-01
            • 2015-02-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多