2012-03-25 8 views
11

に画像の仮想パスを指定する方法を、私はこのコード行を持っている:は、App_Codeフォルダーにある私のかみそりスタイルのヘルパークラス(でASP.Net MVCかみそりヘルパー

<img src="../../Content/images/ajax_activity.gif" alt="loading"/> 

これがで正常に動作しますカッシーニが、私はIIS(仮想ディレクトリ)にアプリを展開するときに、IISは、パスを見つけることができない仮想パスは無視されている また、これは動作しません:。。

<img src="@Href("~/Content/images/ajax_activity.gif")" alt="loading" /> 
+0

'これも動作しません '...どうしてですか?生成されたHTMLを表示してください。 – SLaks

+0

こんにちは。これはjQueryダイアログボックス内のajax呼び出しであり、生成されたソースを見る方法はありませんが(少なくとも私にはわかりませんが)、Firebugで見ると、次のエラーメッセージが表示されます。 "NetworkError:404 Not見つかりました - http://localhost/Content/images/ajax_activity.gif "。仮想ディレクトリをMerkurに設定したので、実際のパスはhttp://localhost/Merkur/Content/images/ajax_activity.gifにする必要があります。 – zszep

+0

もう一つのこと。上記の両方のサンプルは、ビュー内から呼び出されたときに正常に動作します。この問題は、ヘルパーをApp_Codeディレクトリに置くことに関連しているようです(私は複数のビューから呼び出すので、そこにいる必要があります)。 – zszep

答えて

6

それは解決していますが、なぜそれが機能しているのかは分かりません。成功せず、次のすべての組み合わせを試した後:それは仮想ディレクトリを設定して正しく画像パスを返さ

<img src="./Content/images/ajax_activity.gif" alt="loading"/> 

を期待通りに

<img src="../Content/images/ajax_activity.gif" alt="loading"/> 
<img src="/Content/images/ajax_activity.gif" alt="loading"/> 
<img src="~/Content/images/ajax_activity.gif" alt="loading"/> 
<img src="Content/images/ajax_activity.gif" alt="loading"/> 

以下は最終的に働きました。誰でもこれを説明できますか?

+2

遅れて返信しますが、 '。/ Stuff/foo.bar'は' Stuff/foo.bar'のアプリケーションのベースディレクトリを探します。 '〜/ Stuff/foo.bar'はおそらく設定していない仮想パスに対応しています。 '../ Stuff/foo.bar'は親ディレクトリで' Stuff/foo.bar'を参照する相対パスです。 'Stuff/foo.bar'は現在のディレクトリで、'/Stuff/foo.bar'では見えます。私はそれを説明することはできません。私もベースディレクトリを見ることを期待していたでしょう。同様のソリューションを修正しようとしている間にこれを見つけました。これらの点はすべて異なっている可能性があります。そのため、機能しない可能性があります。 –

+0

Stuff/foo.barをカレントディレクトリの "Stuffサブディレクトリ"にすることはできませんか? – zszep

+0

ええ、申し訳ありませんが、 'Stuff/foo.bar'は現在のディレクトリで' Stuff/foo.bar' –

27

これを試してみてください。

<img src="@Url.Content("~/Content/images/ajax_activity.gif")" alt="loading" /> 
+0

これは、次のコンパイラエラーになります:CS0103: 'URL'は現在のコンテキストに存在しません – zszep

+1

これは私のために働いた。おそらくより広い範囲の環境に適用可能でしょう。 – Jordan

0

IISの仮想ディレクトリに展開すると、アプリケーションのルートが開発環境のものと異なる場合があります。

アプリのURLのSIであれば、それは "MyWebApp" であるべき時にASP.NETは、ルートを検討する

http://localhost/MyWebApp/ 

のようなものは、 "localhost" があります。

これを解決するには、仮想ディレクトリをアプリケーションに変換する必要があります。IISマネージャーで、ディレクトリを見つけ、右クリックしてから「アプリケーションに変換」をクリックします。

あなたは、このような絶対的なアプリケーションパスに仮想相対パスに変換するために @Url.Contentメソッドを使用することができ
1

<img [email protected]("~/images/picture.png") alt="picture description"> 

それはクライアントに転送され、このHTMLコードに変換されます:

<img src="/appname/images/picture.png" alt="picture description"> 

UPDATE: 一方、画像をbase64に変換すると、正しく表示されます。

<img src="data:image/png;base64,iVBORw0KG...SuQmCC" alt="picture description"> 
関連する問題