页面导航的最佳实践

时间:2012-08-20 07:30:09

标签: asp.net-mvc

在大多数网站中,始终有一个“返回”前一个按钮。我想知道它们通常是实施的。

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

  

高级搜索=>搜索结果=>搜索详情=>申请工作=>保存工作

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

我目前正在将“back url”存储为查询字符串参数的一部分,并在用户潜入更深层时附加url。这个问题是,当用户潜水超过3个级别时,网址会变得非常冗长和混乱。

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

4 个答案:

答案 0 :(得分: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.

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

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

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

答案 1 :(得分:1)

试试这个旧的javascript方法

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

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

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

答案 2 :(得分:1)

留下后退按钮由浏览器处理,而不是(再次)将其添加到您的网站,因为有许多问题,例如用户打开新页面,新标签或发布相同的帖子页面 - 或来自其他网站,然后背面不符合您的想法。

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

答案 3 :(得分:1)

在我使用的旧网页开发平台(几年前),这是使用内置函数解决的。这个想法是服务器维护了某种内部网址集合并将它们映射到简单数字。当您向集合中添加新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)方法来获取要在“返回上一个”链接中使用的网址。此调用将返回之前添加的网址,即http://foo.bar.com/search/

从第2页到第3页,还需要使用相同的SaveUrl()添加新的查询字符串参数。第3页的新网址将是:

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

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

所以这个系统的工作原理是存储当前页面的url并将其提供给下一页的url。由于当前页面的url以查询参数的形式包含对当前页面上一页的引用,因此将保留返回上一个跟踪。

我想我会解释这一点,因为我认为这是一种处理回到之前路径的聪明方法。我并没有声称它是任何行业标准或最佳做法,但是......

修改:关于此方法的一些想法和注意事项。

优点:

  • 轻松存储和检索网址的方式,而不会导致更长的查询字符串

缺点:

  • 只要网址包含要返回的所有必要状态,就可以正常工作。
  • 根据实现细节(全局URL集合?Session中的用户特定url集合?在Sql server中持续存在?),它可能会导致Web场出现问题(所有服务器都需要就哪个url存储为“1”达成一致)。
  • 可能会导致高流量站点出现内存问题(但这也取决于具体实现)