0

シンプルな画像ギャラリーを作成しようとしています。アップロードは機能しますが、それらの画像の表示に問題があります。

インターネットで、これが正しい方法であることがわかりました:

    [NotMapped]
    public string ImageUrl
    {
        get
        {
            var isEmpty = String.IsNullOrWhiteSpace(ImgName);

            if(isEmpty)
            {
                return Path.Combine("~/Images", "noImageAvailable.png");
            }else
            {
                return Path.Combine("~/Images/uploaded", ImgName);
            }
        }
    }

そしてビューで

@foreach (var item in Model) {
    ...
    @{ var imgPath = HostingEnvironment.MapPath(item.ImageUrl); }
    <img src="@Url.Content(imgPath)"/>

生成するもの:

<img src="C:\......\Images\uploaded\0_634927659072110613.jpg"/>

私のために働いたのは:

    [NotMapped]
    public string ImageUrl
    {
        get
        {
            var isEmpty = String.IsNullOrWhiteSpace(ImgName);

            if(isEmpty)
            {
                return Path.Combine("../Images", "noImageAvailable.png");
            }else
            {
                return Path.Combine("../Images/uploaded", ImgName);
            }
        }
    }

そしてビューで:

@foreach (var item in Model) {
    .....
    <img src="@Url.Content(item.ImageUrl)"/>

生成するもの:

<img src="../Images/uploaded\0_634927649098750170.jpg"/>

備考

2 つの違いがあります。

  1. ~/画像 vs ../画像
  2. ビューの線

興味深いのは、

<img src="C:\......\Images\uploaded\0_634927659072110613.jpg"/>

は画像を静的なスタンドアロン ファイルに表示しますが、IIS によって提供される場合は表示されません。画像の代わりに空白のスペースがあります。

私の質問は、正しいアプローチとは何か、また最初のアプローチが機能しないのはなぜですか?

4

1 に答える 1

1

あなたのコードは、あなたが求めていることを正確に実行しています。var imgPath = HostingEnvironment.MapPath(item.ImageUrl);URLではなく、サーバー上の物理パスを画像URLに返すため、最初のものは機能しません。で 1 番目のブロックを使用し<img src="@Url.Content(item.ImageUrl)"/>ます。これは次のようになります。

[NotMapped]
public string ImageUrl
{
    get
    {
        var isEmpty = String.IsNullOrWhiteSpace(ImgName);

        if(isEmpty)
        {
            return Path.Combine("~/Images", "noImageAvailable.png");
        }else
        {
            return Path.Combine("~/Images/uploaded", ImgName);
        }
    }
}

あなたの見解で:

@foreach (var item in Model) {
    .....
    <img src="@Url.Content(item.ImageUrl)"/>
  1. .net の "~/Images/..." は、Web ルートから、Images フォルダーを見つけて ...
  2. 「../Images/...」は現在の場所に相対的です - 1 つ上のフォルダーに移動し、フォルダーの画像を見つけてから ...
于 2013-01-03T04:05:03.497 に答える