2

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

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

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

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

生成的链接的问题是 URL 中的字符是通过这种方式#编码的:所以我到达了目标页面,但没有到达指定的锚点。%23http://localhost:1234/Path/SubPath/%233

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

先感谢您!

4

4 回答 4

4

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

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

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

于 2010-06-20T18:38:07.137 回答
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可以避免对该值进行解码,此外,这似乎是一种更清洁的方法。

于 2010-06-20T18:08:47.903 回答
0

路由到控制器并重新路由到带有锚参数的页面怎么样?

于 2012-09-11T06:22:35.993 回答
0

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

创建没有锚点的路线。

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

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

<a href="<%: GetRouteUrl("MyRoute", null) + "#3" %>">Link</a>
于 2015-11-29T13:15:53.160 回答