显示图像返回作为从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);
}
我试图使用来自RenderImage操作此代码返回PNG字节数组“返回JSON(System.IO.File.ReadAllBytes(errorFilePath))”,并仍是不能够在视图 – user1570697 2012-08-02 13:45:12
显示图像@ user1570697我编辑的答案和添加一个小的修改,以使其返回png图像文件e,我测试了它,并与我的应用程序一起工作。希望这可以帮助。 – 2012-08-04 09:17:06
我尝试了一个带有示例图像的控制器代码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