2

在大多数网站中,总是有一个“返回”到上一个按钮。我想知道它们通常会被实施。

基本上,我正在构建一个页面深度超过 5 级的网站。例如,页面级别如下:

高级搜索 => 搜索结果 => 搜索详细信息 => 申请工作 => 保存工作

我需要确保用户可以导航回上面的上一个级别,因此从“搜索详细信息”中,他们应该能够单击返回,然后返回到“搜索结果”页面,并保留所有以前的搜索条件。

我目前将“返回 url”存储为查询字符串参数的一部分,并在用户深入研究时附加 url。这样做的问题是,当用户潜入超过 3 个级别时,URL 会变得非常长且混乱。

asp.net MVC 应用程序处理此类问题的最佳实践是什么?

4

4 回答 4

2

I am currently storing the "back url" as part of the query string paramter and append the url as user dives in deeper. The issue with this is that when as user dives in more than 3 levels, the url get really long and messy.

不要将其存储在您的网址中,而是存储在您的会话中。您可以轻松地创建一个类(如果有意义的话),封装您想要的所有内容,然后将其粘贴到您的会话中。如果您只是在存储最后一页的 url 之后,只需在会话中存储一个字符串。

Session["lastPage"] = "~/mypage.aspx";

它比将所有内容附加到您的 url 更清洁(并且更安全)。在这里使用 javascript 不是一个好的选择。

于 2012-08-20T08:29:29.487 回答
1

试试这个旧的 javascript 方法

<a href="javascript:history.go(-1)">Go Back</a>

或者

<input type="button" value="Go Back" onclick="history.go(-1)" />

这应该在每个页面上,但不能保证在所有情况下都能正常工作

于 2012-08-20T07:35:57.690 回答
1

让浏览器处理后退按钮,根本不(再次)将其添加到您的网站,因为有很多问题,例如用户打开新页面、新标签或在同一页面上发帖 - 或来自其他网站然后后面不是你想的那样。

您可以添加的是从一开始就知道的行菜单和/或树形菜单以及下一页/上一页。

于 2012-08-20T07:41:06.260 回答
1

在我使用过的旧 Web 开发平台中(几年前),这是使用内置函数解决的。这个想法是服务器维护某种内部 url 集合并将它们映射到简单的数字。当您向集合中添加新的 url 时,服务器将首先检查该确切的 url 是否已经存在,如果存在则返回关联的数字。如果您添加的 url 是新的,它将被添加并返回一个新的数字。

几个示例来说明......让我们假设用户从页面开始:

http://foo.bar.com/search/

我将此页面称为“第 1 页”。添加搜索条件后,用户将在页面上看到结果:

http://foo.bar.com/search/results?jobTitle=CEO&etc&etc

我将其称为“第 2 页”。在此页面上,用户可以单击打开特定结果并进入页面:

http://foo.bar.com/search/results/12313

我将其称为“第 3 页”。

要使第 2 页和第 3 页具有“返回上一页”功能,需要使用一个额外的查询参数打开它们。当第 1 页生成第 2 页的 url 时,服务器将调用实用程序方法SaveUrl()(在某个合适的类上)并将结果附加到查询字符串,因此第 2 页的 url 变为:

http://foo.bar.com/search/results?jobTitle=CEO&etc&etc&return_url=1

注意新的return_url=1查询参数。然后页面 2 将使用相应的GetReturnUrl(1)方法来获取要在“返回上一个”链接中使用的 url。此调用将带回之前添加的 url,即http://foo.bar.com/search/.

从第 2 页前进到第 3 页还需要使用相同的SaveUrl(). 第 3 页的新 url 将是:

http://foo.bar.com/search/results/12313?return_url=2

在第 3 页上,将使用 获取“返回上一个”页面 url GetReturnUrl(2),这将返回http://foo.bar.com/search/results?jobTitle=CEO&etc&etc&return_url=1

因此,该系统通过存储当前页面的 url 并将其在 url 中提供给下一页来工作。并且由于当前页面的 url 以查询参数的形式包含对当前页面的上一页的引用,因此保留了返回上一页的路径。

我想我会解释这一点,因为我认为这是处理回到上一个线索的聪明方法。我并不是说这是任何行业标准或最佳实践......

编辑:关于这种方法的一些想法和考虑。

优点:

  • 存储和检索 url 的简单方法,不会导致更长的查询字符串

缺点:

  • 只要 url 包含返回所需的所有必要状态,就可以工作。
  • 根据实现细节(全局 url 集合?会话中的用户特定 url 集合?保留在 Sql 服务器中?)它可能会导致 Web 场中的问题(所有服务器需要就存储为“1”的 url 达成一致)。
  • 可能会导致高流量站点的内存问题(但这也取决于具体的实现)
于 2012-08-20T08:32:36.897 回答