2013-01-02 180 views
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 ../Images
  2. 的線路中的視圖

有趣的是,該線

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

顯示在靜態獨立文件的圖像,而當它由IIS提供時,它不會。只有空白而不是圖像。

我的問題是什麼是正確的方法,也是爲什麼第一個工作?

回答

1

您的代碼完全按照您的要求進行操作。第一個不起作用,因爲var imgPath = HostingEnvironment.MapPath(item.ImageUrl);將服務器上的物理路徑返回給圖像URL,而不是URL。使用<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中說,來自Web根目錄,找到該文件夾​​的圖像,然後 .. 。
  2. 「../圖像/ ...」 是相對於當前位置 - 上去 一個文件夾,找到文件夾的圖像,然後...