2013-12-11 11 views
0

MVC 웹 응용 프로그램을 가지고 있고 페이지에 이미지를 표시하려고하는데 성공하지 못했습니다. 내가 찾은 여러 가지 예를 따른다. 내 페이지 "ImageTest.aspx"와 핸들러 "ImageViewer.ashx"MVC 페이지를 사용하여 데이터베이스 이미지 표시

핸들러의 내용은 내 "ImageTest"페이지에는 다음이 포함

<%@ WebHandler Language="C#" Class="ImageHandler" %> 

using System.Web; 

namespace Decri.WebClient.Views.Tablet 
{ 
    public class ImageViewer : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
      context.Response.ContentType = "image/jpeg"; 
      context.Response.WriteFile("palmtree.jpg"); 
     } 

     public bool IsReusable 
     { 
      get { return false; } 
     } 
    } 
} 

이다가 (작업 기본 기능을 얻으려고 노력 데이터베이스)를 사용하기 전에,

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Image Test</h2> 

    <img src="ImageViewer.ashx?id=1" alt="Dynamic Image" /> 

</asp:Content> 

디버그에서 '적십자'실종 이미지 아이콘 때와 페이지가로드, 코드는 내가 핸들러에서 "이 ProcessRequest"에 배치 한 중단 점에서 중지되지 않습니다 . HTML 소스를 살펴보면 위 코드와 동일합니다 (Site.Master에서 HTML을 추가 함).

우리는 (나는 올바른 것으로 이해 핸들러의 컨트롤러에 아무것도) 컨트롤러의 항목이 단순 보관되지 않은 여기 컨트롤러의 기반으로하고 있습니다 :

public ActionResult ImageTest() 
    { 
     return View(); 
    } 

내가 언급 폴더에 정상적인 이미지가 있고 핸들러없이 정상적으로 참조하면 표시되지 않습니다. CONTENT \ IMAGES 폴더로 이동하면됩니다. 처리기를 CONTENT \ IMAGES 폴더에 복사하려고 시도했지만 '아무런 차이가 없습니다.

저는 이제 다소의 상실감이 있으며,이 문제가있어 작동시키는 사람의 지침을 주시면 감사하겠습니다.

답변

3

이 시도 :

context.Response.WriteFile(context.Server.MapPath("~/Content/Images/palmtree.jpg")); 

핸들러가 응용 프로그램의 bin 디렉토리에 이미지를 볼 것이다 MapPath를 호출하지 않고. 당신이 MVC 프레임 워크를 사용하고 있기 때문에

는보다 일관된 방법 (자신의 핸들러를 구현 할 필요가 없습니다)있다 :

public class HelloController : Controller 
{ 
    public ActionResult ShowImage(int id) 
    { 
     var fileName = "palmtree.jpg"; 
     var rawFile = LoadFile(); //Assuming, LoadFile() returns byte[] 

     return File(rawFile, MimeMapping.GetMimeMapping(fileName), fileName); 
    } 
} 

보기 :

<img src="@Url.Action("ShowImage", "Hello", new { id = 1 })" alt="Dynamic Image" /> 
+0

브릴리언트, 감사합니다! 간단한 답이 얼마나 훌륭한가. – Sean