路由到另一页面上的锚点

时间:2010-06-20 17:56:02

标签: asp.net routing anchor asp.net-4.0 webforms-routing

我在ASP.NET 4中使用Web窗体路由,我正在尝试路由到页面上的特定位置。在那个页面上,我有一个像<div id="3">这样的元素,我想从另一个页面跳到这个锚点。为此,我在global.asax中定义了一条路线:

RouteTable.Routes.MapPageRoute("MyRoute", "Path/SubPath/{PageAnchor}",
    "~/MyPage.aspx", true, new RouteValueDictionary { { "PageAnchor", null } });

链接到该页面的HyperLink和锚“3”在标记中以这种方式定义:

<asp:HyperLink ID="HyperLink1" runat="server"
    NavigateUrl="<%$ RouteUrl:RouteName=MyRoute,PageAnchor=#3 %>">
    Link</asp:HyperLink>

生成的链接存在的问题是,网址中的#字符由%23以这种方式编码:http://localhost:1234/Path/SubPath/%233以便我到达目标网页但不会到达指定的锚点

有没有办法避免这种不受欢迎的URL编码?或者任何其他路由到锚点的方式?

提前谢谢!

4 个答案:

答案 0 :(得分:4)

ASP.NET的路由功能不支持锚点。路由旨在仅在应用程序的路径之后和锚点之前支持URL的一部分。

我建议添加一个事件处理程序(例如Page_Load),并在该事件处理程序中生成URL,附加锚点,并在HyperLink控件上设置值。

当然,在大多数使用Web窗体路由的情况下,最简单的方法是手动将URL设置为您想要的任何内容。当URL不复杂且不太可能改变时,这是一个不错的选择。

答案 1 :(得分:0)

这有用吗?

RouteTable.Routes.MapPageRoute("MyRoute", "Path/SubPath/#{PageAnchor}",
    "~/MyPage.aspx", true, new RouteValueDictionary { { "PageAnchor", null } })

<asp:HyperLink ID="HyperLink1" runat="server"
    NavigateUrl="<%$ RouteUrl:RouteName=MyRoute,PageAnchor=3 %>">
    Link</asp:HyperLink>

如果将#放在PageAnchor占位符之外,则可以避免该值被解码,而且除此之外,它似乎更简洁。

答案 2 :(得分:0)

路由如何转到控制器并使用anchor参数重新路由到页面?

答案 3 :(得分:0)

我知道这是一个老问题,但也许其他人可以从这种方法中受益。

创建没有锚点的路线。

RouteTable.Routes.MapPageRoute("MyRoute", "Path/SubPath", "~/MyPage.aspx");

然后像这样构建url,附加锚点。

<a href="<%: GetRouteUrl("MyRoute", null) + "#3" %>">Link</a>