我有一个 ActionMethod,它可以返回图像的 Memorystream 或 byte[]。此操作方法在 ajax 上调用。现在我想将此图像绑定(bind)到图像标签 src 属性。
public ActionResult GetBpChart(string Timespan)
{
var ObjMemoryStream = new MemoryStream();
try
{
ObjMemoryStream = MyModel.GetImage(Timespan);
}
catch (Exception Ex)
{
}
//return Content(Convert.ToBase64String(ObjMemoryStream.GetBuffer()));
//return Json(ObjMemoryStream.GetBuffer());
return File(ObjMemoryStream.GetBuffer(), "image/jpeg");
}
function GetChart() {
try {
$.ajax({
type: 'POST',
url: "myActionMethodurl",
data: {
Timespan: $('#ddlBpTimespan').val()
},
success: function (ImgSrc) {
// For Base64String
//$('#divBpChart').innerHTML = '<img src= "data:image/jpeg;base64," ' + ImgSrc + '"/>';
// For Json of byte[]
//$('#divBpChart').innerHTML = '<img src= "data:image/gif;base64," ' + ImgSrc + '"/>';
// For FileContentResult
$('#imgBpChart').attr('src', ImgSrc);
HideAjaxProgress();
}
});
} catch (E) {
}
}
以上3种组合我都试过了。但没有运气。有人可以说我在这里缺少什么或者实现这一目标的正确方法是什么
最佳答案
来自阅读.ajax()文档,我会说简单的答案是“不,你不能那样做。”
幸运的是,您不需要这样做。只需创建相关的 URL 并更新目标图像的 src
属性:
function GetChart() {
try {
var ImgSrc = '/mycontroller/myActionMethodurl?timespan=' + $('#ddlBpTimespan').val();
$('#imgBpChart').attr('src', ImgSrc);
} catch (error) {
}
}
如果您在 View 中对此进行编码,则可以利用 UrlHelper 来帮助构建正确的“基本”URL:
function GetChart() {
try {
var ImgSrc = '@Url.Action("myActionMethodurl", "mycontroller")?timespan=' + $('#ddlBpTimespan').val();
$('#imgBpChart').attr('src', ImgSrc);
} catch (error) {
}
}
也许有更好的选择?
对于似乎有效的纯 JavaScript 方法,请参阅 Using jQuery's ajax method to retrieve images as a blob .
关于javascript - 如何将字节 []/内存流绑定(bind)到 Javascript 中的图像 src 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29598213/