我有一个非常具体的问题,我认为我不会得到答案但是......让我们试试吧! 我有一个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调用(可能是一个缓存机制?)。
你知道如何解决这个问题吗?
感谢您的回答!
答案 0 :(得分:0)
使用经典的Web脏技巧找到解决方案:
this.ImageFileUploaded.ImageUrl = "AsyncImageHandler.ashx?p=" + Environment.TickCount.ToString();
我在PageLoad()中添加了这一行,最后一个是在定时器触发的每个帖子上调用的:)