【问题标题】:ASP.NET page redirection / crosspostASP.NET 页面重定向/交叉发布
【发布时间】:2009-06-12 18:35:42
【问题描述】:

我有 3 个 asp.net 页面:Search.aspx、Results.aspx 和 Login.aspx。 现在我希望匿名用户能够搜索,所以每个人都可以使用search.aspx。本页调用

Server.Transfer(Results.aspx)

并因此显示结果。现在,当用户未登录时,登录页面的链接会显示在结果页面上。问题是: 登录后,我希望用户自动重定向到结果页面。但是我没有成功,因为 Login.aspx 的 PreviousPage 属性始终为空。当我使用

Request.UrlReferrer.LocalPath

它是 Search.aspx 的链接,而不是 Results.aspx 的链接。 此外,当用户在结果页面上时,我如何让他通过单击链接返回,并且 Search.aspx 上的所有搜索输入条件(如文本框中)仍然存在,因此他可以在完成搜索后细化搜索看到结果了吗?每当我将用户送回时,所有用户输入都会丢失。 我还没有弄清楚是否应该使用普通的超链接、链接按钮以及如何检索上一页的 url 或保留输入数据。

如果有任何帮助,我可以使用 AJAX,但最好使用“纯”asp.net 解决方案。

【问题讨论】:

    标签: asp.net redirect


    【解决方案1】:

    当您执行 Server.Transfer 时,它是服务器端重定向...这意味着客户端仍会看到原始 URL。您需要将搜索条件发布到结果页面,将它们存储在本地,显示登录链接。当他们登录后,您可以重定向到结果页面并重新填充搜索条件并显示结果。

    【讨论】:

    • Response.Redirect 实际上是向浏览器发送一个 HTTP 302(?) 消息,告诉浏览器请求指定的页面。 Server.Transfer 只是执行新页面,渲染并将其发送到浏览器,浏览器认为它正在获取第一页,因为它从未为新页面发出 GET。这就是为什么使用 Server.Transfer 的客户端的 URL 保持不变
    【解决方案2】:

    尝试使用 Response.Redirect("url") 代替 Server.Transfer。当您使用 Server.Transfer 时,客户端上的 url 将保留为搜索页面,而不是实际重定向到结果。

    【讨论】:

      【解决方案3】:

      您可以使用 User.Identity.IsAuthenticated 来检查用户是否已登录,并据此显示/隐藏登录按钮。

      要保留页面的值,您可以将它们存储在 Session 中,然后让搜索页面查找它们,如果它们存在,则将它们放在控件中。

      【讨论】:

      • 感谢您的提示。我现在使用 Session 来存储所有搜索条件,工作起来比想象的要容易。
      【解决方案4】:

      如果需要,您还可以将登录后要返回的 URL 嵌入到查询字符串中。

      【讨论】:

        猜你喜欢
        • 2014-11-23
        • 1970-01-01
        • 2015-03-11
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多