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 に答える