ASP.Net: асинхронная загрузка изображения, отображаемая с помощью обработчика

У меня действительно конкретный вопрос, на который я не думаю, что у меня будет ответ, но ... давай попробуем! У меня есть веб-страница aspx, которая отлично работает с Firefox и Chrome, но не с IE9 (не кормите тролля ^^).

Моя цель - разрешить асинхронную загрузку изображений с помощью ASP AjaxControlToolkit (см. 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 у меня есть поле asp: Image в UpdatePanel, которое просит обработчик получать изображение каждые пять секунд:

<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 (может быть, механизм кеширования?).

Вы знаете, как решить эту проблему?

Спасибо за ответы!


person Pedro    schedule 17.10.2011    source источник
comment
Я обнаружил, что это работает для меня без панели обновлений: nishantwork.wordpress.com/2013/01/18/   -  person Nishant Kumar    schedule 18.01.2013


Ответы (1)


Нашел решение, применив классический веб-трюк:

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

Я добавил эту строку в PageLoad (), последняя вызывается при каждой обратной публикации, запускаемой таймером :)

person Pedro    schedule 18.10.2011