2011-10-02 3 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 면도날의 이미지로 앵커에서 브라우저가 다르게 동작합니다.

이것은 jQuery 줌 이미지 플러그인을 구현하는 데 필요한 것입니다. 두 가지 방법이 있습니다. 하나는 단순히 이미지 양식 DB를 얻고 다른 하나는 미리보기를 만듭니다.

문제는 내 작업에 따라 다릅니다. FF, Chrome, Opera는 (예상대로) 다른 창에서 원본 이미지를 보여줍니다. Safari는 "GetImageThumbnail"이라는 jpg 파일을 다운로드하고 IE는 GetImageThumbnail (jpeg 이미지로 열림)이라는 알려지지 않은 파일을 다운로드 할 것을 제안합니다.

여기 앵커 href 텍스트입니다 : "/Image/GetFullSizedImage?goodId=20" - 모든 브라우저에서 동일합니다.

보기의 도우미 : @Html.GetImageLinkWithInnerImage(Model.Id)입니다. 여기

이 헬퍼 구현 (헬퍼 메소드 :

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; 
    } 

을 그리고 방법에서 앵커와 이미지를 만들고 싶어 사람들을 위해 유용 할 수 있습니다 DB에서 이미지를 검색합니다

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

제공된'goodId '를 사용하여'GetFullSizedImage'에 대한 경로를 추가하십시오. "정적 컨텐츠"에 대한 쿼리 부분을 사용하여 일부 단점을 보게 될 수도 있습니다. – bzlm

+0

메서드는 스트림으로 채워지는 byte [] 배열을 반환합니다.'byte [] data = new byte [outputstream.Length + 1]; outputstream.Read (data, 0, Convert.ToInt32 (outputstream.Length)); 반환 파일 (데이터, "image/jpg"); ' – Bassist

답변

1

"ImageReadyFileContentResult()"메서드에서 내용 유형을 지정하십시오.

+0

특히 브라우저가 실제로 이해할 수있는 콘텐츠 유형입니다. :) – bzlm

관련 문제