ASP.Net: асинхронная загрузка изображений отображается с использованием обработчика - PullRequest
0 голосов
/ 17 октября 2011

У меня есть действительно конкретный вопрос, на который я не думаю, что у меня будет ответ, но ... давайте попробуем! У меня есть веб-страница 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 у меня есть поле 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 (может быть, механизм кэширования?).

У вас есть представление о том, как решить эту проблему?

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

1 Ответ

0 голосов
/ 18 октября 2011

Нашел решение с помощью классического веб-подвоха:

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

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

...