我在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编码?或者任何其他路由到锚点的方式?
提前谢谢!
答案 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>