2011-10-02 30 views
3

world!我有一個「a」標籤的奇怪之處。最大的想法就是渲染這樣的東西:<a href="/*Retrieve an original sized image from database*/"><img src="/*Retrieve an original sized image and resize to thumbnail*/"/> </a>瀏覽器在MVC3 Razor上的圖像上扮演着不同的角色

這是我需要實現一些jQuery縮放圖像插件。我有2種方法 - 一種簡單地獲取圖像形式DB,另一種製作縮略圖。

問題是我的操作有不同的瀏覽器行爲:FF,Chrome,Opera在另一個窗口中顯示原始圖像(如預期的那樣)。 Safari提供下載一個名爲「GetImageThumbnail」的jpg文件,IE提供下載名爲GetImageThumbnail的未知文件(以jpeg圖像打開)。

這裏是主播href文本:"/Image/GetFullSizedImage?goodId=20" - 在所有瀏覽器上都一樣。

這是助手在查看: @Html.GetImageLinkWithInnerImage(Model.Id)

這裏是一個幫助實現(可能是誰要打錨和圖像的helper方法:)

public static MvcHtmlString GetImageLinkWithInnerImage(this HtmlHelper helper, int goodid) 
    { 
     var controller = helper.ViewContext.Controller as Controller; 
     if (controller != null) 
     { 
      var urlHelper = controller.Url; 
      var photoUrl = urlHelper.Action("GetFullSizedImage", "Image", new { goodId = goodid }); 
      var anchorBuilder = new TagBuilder("a"); 
      anchorBuilder.MergeAttribute("href", photoUrl + " "); 
      var innerPhotoUrl = urlHelper.Action("GetImageThumbnail", "Image", new { goodId = goodid }); 
      var imgBuilder = new TagBuilder("img"); 
      imgBuilder.MergeAttribute("src", innerPhotoUrl); 
      imgBuilder.MergeAttribute("alt", "Фото товара"); 
      anchorBuilder.InnerHtml = imgBuilder.ToString(TagRenderMode.SelfClosing); 
      return MvcHtmlString.Create(anchorBuilder.ToString()); 
     } 
     return null; 
    } 

和方法有用的人從數據庫中檢索圖像:

public FileContentResult GetFullSizedImage(int goodId) 
    { 
     byte[] imageData = _db.GetGood(goodId).Image; 

     if (imageData != null) 
     { 
      int imageWidth; 
      int imageHeight; 
      var imageFile = GetImageFromBytes(imageData, out imageWidth, out imageHeight); 

      return ImageReadyFileContentResult(imageWidth, imageFile, imageHeight); 
     } 

     return NoPhotoFileContentResult(); 
    } 

這是HTML輸出:

<a href="/Image/GetFullSizedImage?goodId=20 "><img alt="Фото товара" src="/Image/GetImageThumbnail?goodId=20" /></a> 

我在做什麼錯?

+0

什麼是「ImageReadyFileContentResult」? – bzlm

+0

爲'GetFullSizedImage'添加'goodId'提供的路由;你可能會遇到一些使用「靜態內容」查詢部分的怪癖。 – bzlm

+0

一個方法返回一個由流填充的byte []數組:byte [] data = new byte [outputstream.Length + 1]; outputstream.Read(data,0,Convert.ToInt32(outputstream.Length)); return文件(data,「image/jpg」);' – Bassist

回答

1

在「ImageReadyFileContentResult()」方法中,指定內容類型。

+0

具體而言,瀏覽器實際可以理解的內容類型。 :) – bzlm

相關問題