2010-12-31 31 views
15

私はASP.NET相対パスと混同しています。私が参照するリンクラベル与えたマスターページでASP.NET相対パス

:ASP.NET公式ドキュメントから

<a href="~/Account/Login.aspx">Login</a> 

は私が読んで:

次の例では、ルートで指定するために使用〜演算子を示していイメージサーバーコントロールを使用する場合の相対パスこの例では、Webサイトのどこにページがあるかに関係なく、Webアプリケーションのルートのすぐ下にあるImagesフォルダ()にイメージファイルが読み込まれます。ログインマークアップで

<asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" />

私は/アカウントフォルダ内のページからのリンクをクリックしたときに、私はにリダイレクトしています:

/Account/~/Account/Login.aspx 

なぜ? WHY?h

答えて

27

これは、サーバーコントロールではなく、マークアップで直接使用しているためです。このような単純なものは、それを修正する必要があります。それは、アプリケーションのベースディレクトリのサーバーパスへの参照ですので、

<a runat="server" href="~/Account/Login.aspx">Login</a> 

基本的には、~パス参照は、サーバー上で翻訳する必要があります。プレーンHTMLマークアップはサーバー上で処理されません。そのままクライアントに配信されます。サーバーで処理されたコードだけが、~のパスを解決するコードに変換します。

+7

または:">Loginはあなたに同じ結果を与える必要があります。 –

+0

うん、それもそうするよ。 ' 'コントロールを使用します。開発者が使用したいものに応じて、さまざまなアプローチがあります。 – David

+0

ありがとうDavid&Jamie。あなたに新年をお祈りします。 –

0

ASP.NETサーバーコントロール内のURLを参照するときに〜を使用できます。 あなたは<a>タグでそれを使用しています。このタグは、〜について何も分かっていない単純なhtmlです。使用 ' "/Images/SampleImage.jpg"' の代わり

+1

ページ内でルート "/"を使用するのが気に入らないのは、環境によって異なる場合があるということです。たとえば、あなたのアプリケーションがあなたの開発環境のXPの仮想ディレクトリにあり、プロダクションサーバのWebルートがServer03にある場合、あなたは異なる結果を得ます。 –

+1

"/Images/SampleImage.jpg"は相対パスではありません。このアプローチは、アプリケーションのベースパスがサーバールートに対応する場合にのみ機能します。それはしばしば事実ですが、それは保証されておらず、実際に尋ねられたものではありません。 – David

+0

あなたは正しいです。それは私の簡単な答えでした。他の誰かがResolveClientUrlを投稿しました。これはうまく動作します。 –

1

使用このコマンド

<a href="<%=Page.ResolveUrl("~/product.aspx")%>" >Link To Products</a>