ASP.Net:使用处理程序显示异步图像上传

时间:2011-10-17 19:15:54

标签: asp.net asynchronous ajaxcontroltoolkit handler

我有一个非常具体的问题,我认为我不会得到答案但是......让我们试试吧! 我有一个aspx网页,可以与Firefox和Chrome完美配合,但不能在IE9上运行(不要提供巨魔^^)。

我的目标是允许使用ASP AjaxControlToolkit上传异步图像(请参阅http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/asyncfileupload/asyncfileupload.aspx进行演示)。完成图像异步上传后,调用UploadedComplete函数,并将图像放入会话变量中:

if (fileSizeOk && fileTypeOk)
        Session["image"] = this.AsyncFileUploadLogo.FileBytes;

同时我有一个负责从会话变量返回图像的处理程序:

byte[] buffer = (byte[])context.Session["image"];
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
context.Response.OutputStream.Flush();

然后,在我的aspx页面中,我在UpdatePanel中有一个asp:Image字段,要求处理程序每​​隔五秒钟获取一次图像:

<asp:UpdatePanel ID="UpdatePanelLogo" runat="server">
    <ContentTemplate>  
        <asp:Image ID="ImageFileUploaded" runat="server" ImageUrl="AsyncImageHandler.ashx" />
        <asp:Timer ID="TimerFileUploaded" Interval="5000" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

当用户验证表单时,我只需要从会话中获取变量,然后将图像与其他值一起保存在数据库中。

这是我的问题:使用Firefox和Chrome,计时器会引发图像的重新加载,但是使用IE(甚至是IE9),图像仅在点击F5后显示。当我在处理程序中放置一个断点时,我可以看到它从未被IE调用(可能是一个缓存机制?)。

你知道如何解决这个问题吗?

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

使用经典的Web脏技巧找到解决方案:

this.ImageFileUploaded.ImageUrl = "AsyncImageHandler.ashx?p=" + Environment.TickCount.ToString();

我在PageLoad()中添加了这一行,最后一个是在定时器触发的每个帖子上调用的:)