显示图像返回作为从MVC控制器字节数组通过调用Ajax

问题描述:

当点击在HTML表中的行,所述AJAX调用到MVC3控制器返回与所述图像的一个字节数组JSON对象制成,但空图像在视图中显示。这应该工作从IE 7至9显示图像返回作为从MVC控制器字节数组通过调用Ajax

控制器的代码是:

[HttpPost] 
    public ActionResult RenderImage(string code) 
    { 
     ImageVM viewmodel = GetImage(code) 
     return Json(viewmodel.Chart, "image/png"); 
    } 

用于提高AJAX调用并显示图像的JavaScript代码是

$(document).ready(function() { 
     $('#Table tr').click(function (event) { 
     var id= $(this).attr('id') 
     $.post("/Gateway/RenderImage", { "code": id }, 
    function (data) { 
       alert(data); 
      $('#ChartDiv').html('<img height="200" width="250" src="data:image/png;base64,' + data + '" />'); 

      }); 
     }); 
    }); 

我改变你的代码了一下,这与我一起工作:)

[HttpPost] 
     public virtual JsonResult RenderImage(string code) 
     { 
//for test data Im using the below, you can use yours : GetImage(code)   
var data = 
    @"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC"; 
      return Json(data); 
     } 

,并在使用Javascript(除去一个反斜杠)

$('#Table tr').click(function (event) { 
     var id = $(this).attr('id') 
     $.post("Gateway/RenderImage", { "code": id }, 
    function (data) { 
     alert(data); 
     $('#ChartDiv').html('<img height="200" width="250" src="data:image/png;base64,' + data + '" />'); 

    }); 
    }); 

[编辑] 以与PNG文件上面的代码的工作,我们可在控制器动作改变为以下:

[HttpPost] 
public virtual JsonResult RenderImage(string code) 
{ 
    var filePath = "~/Images/PngExampleImag.png"; 
    var ImageBytes = System.IO.File.ReadAllBytes(Server.MapPath(filePath)); 
    var data = Convert.ToBase64String(ImageBytes); 
    return Json(data); 
} 
+0

我试图使用来自RenderImage操作此代码返回PNG字节数组“返回JSON(System.IO.File.ReadAllBytes(errorFilePath))”,并仍是不能够在视图 – user1570697 2012-08-02 13:45:12

+0

显示图像@ user1570697我编辑的答案和添加一个小的修改,以使其返回png图像文件e,我测试了它,并与我的应用程序一起工作。希望这可以帮助。 – 2012-08-04 09:17:06

+0

我尝试了一个带有示例图像的控制器代码var filePath =“〜/ Images/Error.png”; var ImageBytes = System.IO.File.ReadAllBytes(Server.MapPath(filePath)); var base64data = Convert.ToBase64String(ImageBytes); return Json(base64data);仍然图像没有得到更新,尽管数据来到ajax回调,可能是这不能正常工作$('#ChartDiv')。html('');我用IE 9 – user1570697 2012-08-06 10:52:32