javascript - 如何将字节 []/内存流绑定(bind)到 Javascript 中的图像 src 属性

标签 javascript c# ajax asp.net-mvc asp.net-mvc-4

我有一个 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/

相关文章:

javascript - AJAX 按钮过滤器更新代码更新(查看新代码)

javascript - 如何在 Mongo J/S 中将 UTC 时间转换为任意本地时间

javascript - Axios 泛型 Post 在 TypeScript 中返回错误类型

javascript - 使用 Jquery 悬停所有子元素

C#:简单的 Windows 服务提供安全异常

c# - 找不到源 'x' 中事件 ID 'y' 的描述。从 eventvwr C# 读取 'System' 事件日志

javascript - 向多维 javascript 数组添加新条目

c# - 在 C# 中引用一个对象

javascript - Rails 在同一页面提交后显示信息

jquery - 我试图在 Jquery Ajax 调用之前显示 Loader,但它不起作用