web-dev-qa-db-ja.com

ASP.NetMVCレイザーヘルパーで画像の仮想パスを指定する方法

私のかみそりスタイルのヘルパークラス(App_Codeフォルダーにあります)には、次のコード行があります。

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

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

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

OK、解決しましたが、なぜ機能するのかよくわかりません。次のすべての組み合わせを試しても成功しなかった後:

<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"/>

仮想ディレクトリを設定して、イメージパスを正しく返しました。これを説明できる人はいますか?

7
zszep

これを試して:

<img src="@Url.Content("~/Content/images/ajax_activity.gif")" alt="loading" />
27
Charles Ouellet

@Url.Contentメソッドを使用して、次のように仮想相対パスを絶対アプリケーションパスに変換できます。

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

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

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

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

<img src="data:image/png;base64,iVBORw0KG...SuQmCC" alt="picture description">
1
almaceleste

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

アプリのURLが次のような場合

http://localhost/MyWebApp/

ASP.NETは、ルートが「MyWebApp」である必要があるのに、「localhost」であると見なします。

これを解決するには、仮想ディレクトリをアプリケーションに変換する必要があります。IIS Managerで、ディレクトリを見つけ、その上で右クリックして、[アプリケーションに変換]]をクリックします。

0
glacasa