2017-05-10 10 views
-1

私は何か変わったことに気付きました。 通常、ASP.NETの場合は、URLの先頭に〜を付けると、この記号はWebサイトのルートディレクトリを表します。ASP.NETの仮想リンクは404エラーを返します

私の.aspxページにあるすべてのリンク(何らかの理由を除いて)はIdentityのテンプレートページがあるAccountフォルダにあるページを指しています。

だから、このリンクをクリックすると、私は404エラーを与え、asp.netは、要求されたURLが

/~/Account/Login.aspx

だった明らかにそうでないことを私に知らせますファイルシステムに〜という名前のフォルダがないので、この場合は動作します。しかし、なぜそれは動作しません?

〜/記号を削除した場合、リンクは一度動作しますが、2回クリックするとブラウザは/Account/Account/Login.aspxに移動しようとしますが、これはもちろん別の404エラーをスローします。

enter image description here

私はそれはユーザーがそのリンクをクリックするたびに、それがLogin.aspxのページに彼を取る作るために何ができますか?

+0

どのようにリンクを作成していますか?作業リンクとこの作業不可能リンクの違いは何ですか? – David

+0

まず最初に、href属性を追加するたびにupsを表示するVisual Studioのポップアップウィンドウでリンクを追加しようとしました。 VSの自動hrefのURLは "Account \ Login.aspx"でした。これは、2回目にリンクをクリックすると404エラーが発生します。 –

+0

ポップアップウィンドウ?実際のコードは何ですか?相対パスを使用する場合は、正しい相対ロケーションから使用する必要があります。 "Account/Login.aspx"は、 "Account"フォルダを含むフォルダ以外は何も動作しません。 – David

答えて

2

あなたがコメントで提供されているコードのスクリーンショットによると、あなたの実際のコードは次のとおりです。

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

限りURLが懸念しているとして、ここには~パスはありません。 ~Accountパスがあります。すべて1つの言葉として。もちろん存在しません。

あなたはアプリケーションのルートを示すために~パスを使用していますが、独自の道としてそれを維持する必要があることができます。また

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

、あなたがおそらく必要が明示的枠組みを伝えるためにこのため、サーバ側の処理を適用する:-であるとして、それはブラウザにコンテンツを送信する場合

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

ため、ブラウザは何をDに知ることができませんoは~パスであり、それはサーバーサイドでのみ意味があります。

+0

ああ神様!runat = "server"の省略は厄介者でした!私は実際のURLでさまざまな種類のものを試していましたが、気づいていませんでした。ありがとうございました! –

関連する問題