Направление на якорь на другой странице - PullRequest
2 голосов
/ 20 июня 2010

Я использую маршрутизацию веб-форм в 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, так что я достигаю целевой страницы, но не на указанной привязке.

IsЕсть ли способ избежать этой нежелательной кодировки URL?Или какой-нибудь другой способ проложить маршрут до якоря?

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 20 июня 2010

Якоря не поддерживаются функцией маршрутизации ASP.NET. Маршрутизация предназначена для поддержки только части URL-адреса после пути приложения и до привязки.

Я предлагаю добавить обработчик события (например, Page_Load) и в этом обработчике события сгенерировать URL, добавить привязку и установить значение в элементе управления HyperLink.

Конечно, в большинстве случаев с маршрутизацией веб-форм проще всего установить URL-адрес вручную по своему усмотрению. Это хороший вариант, когда URL-адрес не сложный и вряд ли изменится.

0 голосов
/ 29 ноября 2015

Я знаю, что это старый вопрос, но, возможно, кто-то другой мог бы извлечь выгоду из этого подхода.

Создайте маршрут без привязки.

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

И затем создайте URL-адрес следующим образом, добавляя якорь.

<a href="<%: GetRouteUrl("MyRoute", null) + "#3" %>">Link</a>
0 голосов
/ 11 сентября 2012

Как насчет маршрута, идущего к контроллеру, который перенаправляет на страницу с параметром привязки?

0 голосов
/ 20 июня 2010

Это работает?

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, вы можете избежать декодирования этого значения, и, кроме того, это кажется более чистым способом сделать это.

...