如何通过jQueryAjax将MVC控制器中的图表图像作为文件结果进行流式更新

如何通过jQueryAjax将MVC控制器中的图表图像作为文件结果进行流式更新,jquery,asp.net-mvc,charts,Jquery,Asp.net Mvc,Charts,我正在试验Nic的方法,将图像作为控制器的FileResult进行流式处理 我想我可以更进一步,通过jQuery更新一个图像。 我尝试了各种方法,但无法让图像显示出来。在当前状态下,我看到了PNG的所有字符,我认为它正在发送二进制数据。 有人知道怎么做吗 局部视图 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <img src="/Home/GetHistoryChart" alt=

我正在试验Nic的方法,将图像作为控制器的FileResult进行流式处理

我想我可以更进一步,通过jQuery更新一个图像。
我尝试了各种方法,但无法让图像显示出来。在当前状态下,我看到了PNG的所有字符,我认为它正在发送二进制数据。
有人知道怎么做吗

局部视图

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<img src="/Home/GetHistoryChart" alt="My Chart" id="imgHistoryChart" />

jQueryLoad函数期望从服务器获取HTML,但您正在调用一个返回二进制流的操作,因此二进制流在显示为HTML之前会转换为文本

您可以简单地重写RefreshImage,如下所示:

function RefreshImage(from, to) {
    $('imgHistoryChart')[0].src = '/Home/GetHistoryChart?' +
                                  'fromDate=' + escape(from) + 
                                  '&toDate=' + escape(to);
}
您真正需要做的就是更新image元素的SRC。我还将禁用该操作的HTTP缓存,以便浏览器不会显示URL相同的缓存图像(除非这是您想要的)

public FileResult GetHistoryChart(string? fromDate, string? toDate)
{
 //  code...
 System.IO.MemoryStream imageStream = new System.IO.MemoryStream();
        Chart1.SaveImage(imageStream, ChartImageFormat.Png);
        return new FileResult("Yo.png", "image/png", imageStream.ToArray());
}
function RefreshImage(from, to) {
    $('imgHistoryChart')[0].src = '/Home/GetHistoryChart?' +
                                  'fromDate=' + escape(from) + 
                                  '&toDate=' + escape(to);
}