Направление на якорь на другой странице
Я использую маршрутизацию веб-форм в ASP.NET 4, и я пытаюсь перенаправить в определенное место на странице. На этой странице у меня есть такой элемент, как <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 кодируется %23
сюда: http://localhost:1234/Path/SubPath/%233
так что я достигаю целевой страницы, но не на указанной привязке.
Есть ли способ избежать этой нежелательной кодировки URL? Или какой-то другой способ направить на якорь?
Заранее спасибо!
4 ответа
Якоря не поддерживаются функцией маршрутизации ASP.NET. Маршрутизация предназначена для поддержки только части URL-адреса после пути приложения и до привязки.
Я предлагаю добавить обработчик событий (например, Page_Load) и в этом обработчике событий сгенерировать URL-адрес, добавить привязку и установить значение в элементе управления HyperLink.
Конечно, в большинстве случаев с маршрутизацией веб-форм проще всего установить URL-адрес вручную по своему усмотрению. Это хороший вариант, когда URL не сложный и вряд ли изменится.
Я знаю, что это старый вопрос, но, возможно, кто-то еще мог бы извлечь выгоду из этого подхода.
Создать маршрут без якоря.
RouteTable.Routes.MapPageRoute("MyRoute", "Path/SubPath", "~/MyPage.aspx");
А затем создайте URL-адрес, добавив якорь.
<a href="<%: GetRouteUrl("MyRoute", null) + "#3" %>">Link</a>
Как насчет маршрута, идущего к контроллеру, который перенаправляет на страницу с параметром привязки?
Это работает?
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
заполнитель, вы можете избежать декодирования этого значения, и, кроме того, это кажется более чистым способом сделать это.