如何将字节[]/内存流绑定到Javascript中的image src属性

如何将字节[]/内存流绑定到Javascript中的image src属性,javascript,c#,ajax,asp.net-mvc,asp.net-mvc-4,Javascript,C#,Ajax,Asp.net Mvc,Asp.net Mvc 4,我有一个ActionMethod,它可以返回图像的Memorystream或byte[]。此操作方法在ajax上调用。现在我想将这个图像绑定到一个图像标记src属性 public ActionResult GetBpChart(string Timespan) { var ObjMemoryStream = new MemoryStream(); try { ObjMemoryStream = MyModel.Get

我有一个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) {
} 
}
公共操作结果GetBpChart(字符串时间跨度) { var ObjMemoryStream=new MemoryStream(); 尝试 { ObjMemoryStream=MyModel.GetImage(Timespan); } 捕获(例外情况除外) { } //返回内容(Convert.ToBase64String(ObjMemoryStream.GetBuffer()); //返回Json(ObjMemoryStream.GetBuffer()); 返回文件(ObjMemoryStream.GetBuffer(),“image/jpeg”); } 函数GetChart(){ 试一试{ $.ajax({ 键入:“POST”, url:“myActionMethodurl”, 数据:{ Timespan:$('#ddlBpTimespan').val() }, 成功:功能(ImgSrc){ //对于Base64String //$('#divBpChart')。innerHTML=''; //对于字节为[]的Json //$('#divBpChart')。innerHTML=''; //对于FileContentResult $('imgBpChart').attr('src',ImgSrc); HideAjaxProgress(); } }); }捕获(E){ } } 我试过以上三种组合。但是没有运气。如果有人能说出我在这里遗漏了什么,或者通过阅读文档可以找到正确的方法,我会说简单的答案是“不,你不能那样做。”

幸运的是,你不需要这么做。只需创建相关URL并更新目标图像的
src
属性:

function GetChart() {
    try {
        var ImgSrc = '/mycontroller/myActionMethodurl?timespan=' + $('#ddlBpTimespan').val();
        $('#imgBpChart').attr('src', ImgSrc);
    } catch (error) {
    } 
}
如果在视图中对此进行编码,则可以利用UrlHelper帮助构建正确的“基本”URL:

也许是更好的选择?
要了解一个似乎有效的普通JavaScript方法,请参阅。

如果直接请求GetBpChart操作,是否会返回有效图像?是的,我会。我在直接调用GetBpChart操作时获得了预期的图像。
function GetChart() {
    try {
        var ImgSrc = '@Url.Action("myActionMethodurl", "mycontroller")?timespan=' + $('#ddlBpTimespan').val();
        $('#imgBpChart').attr('src', ImgSrc);
    } catch (error) {
    } 
}