我有一个ActionMethod可以返回图像的Memorystream或byte []。在ajax上调用此操作方法。现在我想将此图像绑定到图像标记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种组合。但没有运气。有人可以说我在这里缺少什么,或者说实现这个目标的正确方法是什么
答案 0 :(得分:2)
通过阅读.ajax()文档,我会说简单的答案是&#34; 不,你不能这样做。&#34;
幸运的是,你不需要。只需创建相关网址并更新目标图片的src
属性:
function GetChart() {
try {
var ImgSrc = '/mycontroller/myActionMethodurl?timespan=' + $('#ddlBpTimespan').val();
$('#imgBpChart').attr('src', ImgSrc);
} catch (error) {
}
}
如果您在View中对此进行编码,则可以利用UrlHelper来帮助构建正确的&#34; base&#34;网址:
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。