2016-12-08 10 views
0

私はWebフォームアプリケーションでASP.NETルーティングを使用しています。相対URLを使用して、現在のディレクトリのすぐ下のページにアクセスできますか?

果物についてのページにproduce/fruitというルートがあるとします。

私はリンゴについてのページにproduce/fruit/applesというルートを持っているとも言います。

したがって、produce/fruitはページとディレクトリです。このページから、現在のページを含める必要がない、相対URLを使用してproduce/fruit/applesにハイパーリンクを作成できますか?

ページの下のアンカーをproduce/fruitで使用すると、存在しないproduce/applesになります。しかし、同じページ上の同じリンクをproduce/fruit/で使用すると、正しいページ/サブディレクトリに移動します。もちろん

<a href="apples">apples</a> 

produce/fruitからの私のリンクは<a href="fruit/apples">apples</a>可能性がありますが、私は、現在のページ名を含める必要があり、それがproduce/fruit/から動作しません。

私が忘れてしまった本当にシンプルなHTMLがあるような気がします。

+0

を、あなたは '' applesを試してみたのですか? –

+0

'apples'を試しましたか?Btw 'produce/fruit'はページでもなく、ディレクトリでもありません。 'produce/fruit'はページであり、' produce/fruit/'はディレクトリです –

+0

これはディレクトリとして' produce/apples/'に行きますが、現在のディレクトリはパスに保持しません。 – Matt

答えて

0

問題は、現在のURLの末尾にスラッシュ(またはその欠如)を考慮していないということです。

たとえば、URLが/produce/fruitで、hrefが​​の場合、結果のリンクは/produce/applesになります。ただし、同じhrefのURLがproduce/fruit/の場合、結果のリンクは/product/fruit/applesになります。要するに、URLに末尾のスラッシュを常に使用する必要があります。これを支援するために、あなたはあなたのRouteConfig.csでroutes.AppendTrailingSlash有効にすることができます。

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.AppendTrailingSlash = true; 
+0

それだけで済むかもしれませんが、サイトのコンテンツ内のすべての静的リンクを更新する必要があります。 私は、リンクを使ってリンク上でそれを扱う方法、あるいはルートごとにルートを扱うことを望んでいました。 – Matt

+0

URLに末尾のスラッシュを付けることができない場合は、絶対的なhrefを持つことは間違いありません。 FWIWでは、すべての静的リンクを必ずしも更新する必要はありません。このフラグが動作する方法は、MVCが末尾にスラッシュを含めるようにURLを書き換えることです。つまり、 '/ produce/fruit'へのリンクをクリックすると、アドレスバーのURLは'/produce/fruit/'(スラッシュ付き)になります。 –

関連する問題